首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    「图解」缺失的第一个正数

    今天分享的题目来源于 LeetCode 第 41 号问题:缺失的第一个正数。 题目描述 给定一个未排序的整数数组,找出其中没有出现的最小的正整数。...11, 12] 一共 5 个数字,每一个都不是 “1”、“2”、“3”、“4”、“5” 中的一个,因此我们无须关注它们; 2、i 就应该放在索引为i - 1 的位置上; 这句话也可以这么说 “索引为 i...LeetCode 第 41 题:缺失的第一个正数-2 ? LeetCode 第 41 题:缺失的第一个正数-3 ? LeetCode 第 41 题:缺失的第一个正数-4 ?...LeetCode 第 41 题:缺失的第一个正数-5 ? LeetCode 第 41 题:缺失的第一个正数-6 ? LeetCode 第 41 题:缺失的第一个正数-7 ?...2 // [4,3,2,1] 要变成 [1,2,3,4] // 这里负数和大于数组长度的数都是"捣乱项"。

    80420

    缺失的第一个正数(LeetCode 41)

    exist { return p } } } 4.2 排序 我们可以对数组排序,然后遍历数组,找到第一个不在 nums 中的正整数。...打完标记后,遍历数组,如果下标 i 没有被打上标记,那么 i+1 就是数组中缺失的第一个正整数。 如果数组所有下标均被打上标记,那么 n+1 就是数组中缺失的第一个正整数。...这样一来,数组中的所有数就都是正数了,因此我们就可以将「标记」表示为「负号」。 算法的流程如下: 我们将数组中所有小于等于 0 的数修改为 n+1。...在遍历完成之后,如果数组中的每一个数都是负数,那么答案是 n+1,否则答案是第一个正数的下标加 1。 时间复杂度: 三次遍历数组,第一次遍历将数组中所有非正数变成 n+1。...缺失的第一个正数 - LeetCode

    21010

    leetcode 41| 缺失的第一个正数

    给定一个未排序的整数数组,找出其中没有出现的最小的正整数。...其实它就是给定一个数组,然后看看数组中是否包含正整数1,2,3,4。。。找出第一个未出现的正整数。比如实例1,从1开始,元素有1,有2,没有3,所以输出的是3。...解决思路:它需要找出第一个数组中没有的最小正整数,所以我们通过数组的索引来标识相应的正整数,比如索引0表示正整数1,以此类推,索引i表示正整数i+1,我们只需要遍历一次数组,将满足下列条件的元素交换到对应索引处...再通过一次遍历,找出第一个不符合元素值等于索引值i+1的元素,返回结果i+1即为我们需要的寻找的正整数。...代码实现 int firstMissingPositive(int* nums,int length) { for (int i = 0; i 的第一个元素开始逐一判断

    89620

    Leetcode No.41 缺失的第一个正数

    「真正」满足此要求的算法是不存在的。但是我们可以退而求其次:利用给定数组中的空间来存储一些状态。...实际上,对于一个长度为 N的数组,其中没有出现的最小正整数只能在 [1, N+1] 中。这是因为如果 [1, N] 都出现了,那么答案是 N+1,否则答案是 [1, N]中没有出现的最小正整数。...这样一来,数组中的所有数就都是正数了,因此我们就可以将「标记」表示为「负号」。...如果∣x∣∈[1,N],那么我们给数组中的第|x|−1个位置的数添加一个负号。...注意如果它已经有负号,不需要重复添加; 在遍历完成之后,如果数组中的每一个数都是负数,那么答案是N+1,否则答案是第一个正数的位置加1。

    72410

    缺失的第一个正数

    难度 困难 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。...题解一 :直接用哈希表不满足题目内存空间要求 可以直接用给的数组存 用一种特殊标记来记录某个值是否存在 如 用第n-1个下标的数是负数 表示n存在 判断 第一个出现的正数的下标 X 则缺少的就是X+1...因为有负数的存在一开始 所以把相应的位置 设置成正数即可 正数要超过 n 避免和 普通数混淆 可以使用n+1 遍历时 吧正数 标志的下标设置 为负数 for (int i = 0; i < n; +...(num <= n) { nums[num - 1] = -Math.abs(nums[num - 1]); } 第三次遍历 找 存在的正数...下标 题解二 : 置换数组 如 某个位置的数为 n 就把他和下标 n-1的数置换 这样一轮下来 就能保证 每个下标下面是自己的数 遍历一轮 发现有的位置没有相应的 数 即 所缺少的 数字 class

    1K20

    int类型的取值范围(为什么负数比正数表示的范围多一位)

    前言: 还记得那个刚刚学习C语言,老师给我们讲课的时候,我就稍微了解一下为什么int类型的数据,负数可以表示到-2³¹,而正数只能表示到2³¹-1。...有符号类型的表示形式: ●有符号的类型,用第一位来表示符号位,1代表负数,0代表正数,其他31位就是用,表示数值,比特位只能放1和0。...2.原码、反码、补码 我们输入的数,一开始是原码,要变成补码以后,才能存储的计算机中,打印的是原码。 正数的原码、反码、补码都相同。...负数从原码到反码是符号位不变,其他的取反,这里的取反就是,0变成1,1变成0,因为二进制里面只有0和1....,如果采用0X进行赋值,那么就直接在计算机以这种形式保存下来,因为保存的是补码,负数要转为原码以后,才能打印。

    29300

    你真的了解Java中的负数?

    public static void main(String[] args) { System.out.println(0xffffffff); } 下面两行代码的输出相同吗?...答案当然是不会,它输出的结果是65535。下面我为大家整理了相关的基础知识,相信大家读完后应该就知道其中的原因了。 一、Java中如何编码负数?    ...这样不管b是正数还是负数,转换成char时,都相当于是在左边补上8个0,即进行零扩展而不是符号扩展。  ...六、小结     实际上在数值类型转换时,只有当遇到负数时才会出现问题,根本原因就是Java中的负数不是采用直观的方式进行编码,而是采用“2的补码”方式,这样的好处是加法和减法操作可以同时使用加法电路完成...,但是在开发时却会遇到很多奇怪的问题,例如(byte)128的结果是-128,即一个大的正数,截断后却变成了负数。

    2.9K120

    数组特性的妙用!如何找到「缺失的第一个正数」

    作者 | P.yh 今天分享的题目来源于 LeetCode 第 41 号问题:缺失的第一个正数。题目难度为 Hard。本文使用了一个比较 Trick 的解法。...题目描述 给定一个未排序的整数数组,找出其中没有出现的最小的正整数。...如果继续想下去有几点是可以明确的: 缺失的正整数肯定在 [1, array.length + 1] 这个范围内 我们可以交换输入数组中的元素的位置来让 index 和 value 的关系更加明确 保证...= i + 1) { return i + 1; } } return nums.length + 1; } 总结 代码中 index 和...总的来说这道题并没有涉及什么算法和数据结构的应用,有点像脑筋急转弯的感觉,想到了就做的出,想不到的话就做不出,但是它给我们解数组问题提供了一个新的方向:利用 index 和 value 的对应关系来辅助求解

    94320

    ​LeetCode刷题实战41:缺失的第一个正数

    今天和大家聊的问题叫做 缺失的第一个正数,我们先来看题面: https://leetcode-cn.com/problems/first-missing-positive/ Given an unsorted...题意 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数 。你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。...所以我们可以强行另数组下标和存的值产生联系-> 令数字i出现在下标为i-1的位置,如果会越界则不做处理。...=nums[nums[i]-1]){ //确定nums[i]的值对应的下标不越界,同时排除num[i]本身位置正确或者nums[i]应该放入的位置nums[i]-...,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。

    24620
    领券