leetcode 热题 100_缺失的第一个正数

题解一:

        正负模拟哈希:偏技巧类的题目,在无法使用额外空间的情况下,只能在原数组中做出类似哈希表的模拟。除去数值,我们还可以用正负来表示下标值的出现情况。首先,数组中存在正负数和0,而负数和0对结果是没有影响的,我们将它们设置为一个较大的正数0x3f3f3f3f,如此,当前数组中就只存在正整数。

设想一下,没有出现的最小的正整数可能的值,一定是在[1,nums.length+1]中的,原因是数组最多只能有nums.length个正整数。因此下一步我们将处于这个范围内出现过的值,nums[值-1]设置为负数,来表示这个值已经出现过了。这里需要注意三点:第一,[1,nums.length+1]中只有[1,nums.length]可以用下标表示,而存储结果的值result可以初始化为nums.length+1。第二,我们需要用绝对值来表示这些正整数,因为先出现的值可能会将后出现的值设置为负数。第三,使用乘-1的方式,出现偶数次的数值仍然会被判断为未出现过,因此必须加上判断语句。

最后我们遍历数组,找到的第一个正数,对应的下标+1就是未出现过的最小正整数。

class Solution {
    public int firstMissingPositive(int[] nums) {
        int n = nums.length;
        int result = nums.length + 1;

        for (int i = 0; i < n; i++) {
            if (nums[i] <= 0) nums[i] = 0x3f3f3f3f;
        }

        for (int i = 0; i < n; i++) {
            int temp = Math.abs(nums[i]);
            if (temp <= n && nums[temp - 1] > 0) nums[temp - 1] *= -1;
        }

        for (int i = 0; i < n; i++) {
            if (nums[i] > 0) {
                result = i + 1;
                break;
            }
        }
        return result;
    }
}

相关推荐

  1. 第一正数 - LeetCode 17

    2024-03-10 03:06:03       41 阅读
  2. LeetCode100】41. 第一正数(数组)

    2024-03-10 03:06:03       37 阅读
  3. Leetcode 41. 第一正数

    2024-03-10 03:06:03       41 阅读
  4. leetcode_41.第一正数

    2024-03-10 03:06:03       30 阅读
  5. [leetcode]first-missing-positive 第一正数

    2024-03-10 03:06:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 03:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 03:06:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 03:06:03       82 阅读
  4. Python语言-面向对象

    2024-03-10 03:06:03       91 阅读

热门阅读

  1. Prompts(一)

    2024-03-10 03:06:03       41 阅读
  2. 实现video视频缓存

    2024-03-10 03:06:03       46 阅读
  3. http请求重定向

    2024-03-10 03:06:03       63 阅读
  4. RK android11 user打开adb调试功能

    2024-03-10 03:06:03       38 阅读
  5. chatgpt

    2024-03-10 03:06:03       40 阅读
  6. 算法之简单排序算法“选择排序”(python)

    2024-03-10 03:06:03       40 阅读