【题解】缺失的第一个正数

news/2024/5/19 23:07:35 标签: leetcode, 算法, 数据结构, 快速排序, 动态规划

题目要求
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1

解题思路
1、先将数组中所有不正常的数字(负数、零或大于数组个数的数)替换成1
2、通过将每个数所指向的下标上的数变成负数,最后遍历数组找到第一个正数。如果整个数组都没有正数,就取数组个数的后一位
3、特殊情况,因为数组中会出现多个重复的数字,所以我们需要先将目标对象取绝对值之后再变负。


力扣编译器

int firstMissingPositive(int* nums, int numsSize){
//1、我们先遍历一遍数组,判断是否有1,有则将负数、零和大于数组个数的数替换成1,否则直接返回1
    int count = 0;
    for(int i = 0; i < numsSize; ++i){
        if(nums[i] == 1)
            count++;
    }
    if(!count++)
        return 1;

    for(int i = 0 ; i < numsSize; ++i){
        if(nums[i] <= 0 || nums[i] > numsSize)
            nums[i] = 1;
    }
//2、继续遍历数组,将每个元素的数字指向下标上的元素变成负数
//特殊情况,因为数组中会有多个重复数字,所以我们要把下标的元素取绝对值再取负
    for(int i = 0; i < numsSize; ++i){
        int index = abs(nums[i]);
        nums[index - 1] = - abs(nums[index - 1]);
    }

//3、遍历数组,将遇到的第一个正整数的下标 + 1输出
    for(int i = 0; i < numsSize; ++i){
        if(nums[i] > 0)
            return i + 1;
    }

    return numsSize + 1;
}

本月更新进度 7/15

创作不易,你的点赞是我最大的动力!!!
我们下次再见 end~

在这里插入图片描述


http://www.niftyadmin.cn/n/1665657.html

相关文章

css样式实现小三角

.tangle{content: ;display: inline-block;width: 5px;height: 5px;border: 1px solid #bc9a63;border-radius: 3px;background: white;transform: rotate(45deg);position: absolute;right: 6px;top: 29px;z-index: 10;border-color: #bc9a63 #ffffff #ffffff #bc9a63; } 转载…

【题解】最后一个单词的长度

题目要求 给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s&#xff0c;返回其最后一个单词的长度。如果字符串从左向右滚动显示&#xff0c;那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词&#xff0c;请返回 0 。 说明&#xff1a;一个单词是指仅由字母组成、…

js获取屏幕宽高

网页可见区域宽&#xff1a;document.body.clientWidth 网页可见区域高&#xff1a;document.body.clientHeight 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽) 网页可见区域高&#xff1a;document.body.offsetHeight (包括边线的宽) 网页正文全文宽&a…

【题解】数组中的第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k 2 输出: 5示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k 4 输出: 4解题思路 1、先将数组排序 2、…

R语言—自动报告Markdown笔记

一句话介绍&#xff1a;Markdown是一种轻量级标记语言&#xff0c;内容是代码与文本的混合&#xff0c;类似HTML,但语法比HTML简单。 &、<符号的输出&#xff1a;HTML中的书写样式分别为"<","&amp;"&#xff0c;在Markdown中如果是字符实体的…

酒桌上的气氛神器【掷骰子】!!!

骰子确实是活跃酒桌气氛的一大神器&#xff0c;因为它的随机带来的不确定性让我们感到紧张和兴奋。所以我们今天来通过一个程序来重新体会一下掷骰子的乐趣。 程序要求 1、输入骰子的面数和个数 2、输出总点数 3、用户决定是否继续 4、退出后返回掷骰子的次数 解题思路 1、获…

java基础11(反射)

1.类加载器a.类的加载: 定义&#xff1a;当程序要使用某个类时&#xff0c;如果该类还未被加载到内存中&#xff0c;则系统会通过加载&#xff0c;连接&#xff0c;初始化三步来实现对这个类进行初始化。一个类在加载过程中的三部曲:A.加载 :就是指将class文件读入内存&#…

对数值字符串求值

题目要求&#xff1a; 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和。 注意&#xff1a; num1 和num2 的长度都小于 5100;num1 和num2 都只包含数字 0-9;num1 和num2 都不包含任何前导零;你不能使用任何內建 BigInteger 库&#xff0c; 也不能直接将输…