美文网首页
数组类41--缺失的第一个正数(H)

数组类41--缺失的第一个正数(H)

作者: 干LeetCode | 来源:发表于2019-08-26 23:44 被阅读0次
    image.png

    AC代码

    class Solution {
        public int firstMissingPositive(int[] nums) {
            if(nums == null || nums.length == 0) {
                return 1;
            }
            for(int i = 0; i < nums.length; i++) {
                if(nums[i] <= 0) {
                    continue;
                }
                if(nums[i] > nums.length) {
                    nums[i] = -1;
                    continue;
                }
                if(nums[i] == i + 1) {
                    continue;
                }
                // >0 && <length
                int k = nums[i];
                nums[i] = -1;
                while(k > 0 && k <= nums.length) {
                    int tmp = nums[k - 1];
                    nums[k - 1] = k;
                    if(k != tmp) {
                        k = tmp;
                    }else {
                        k = -1;
                    }
                }
            }
            for(int i = 0; i < nums.length; i++) {
                if(nums[i] != i + 1) {
                    return i + 1;
                }
            }
            return nums.length + 1;
        }
    }
    

    精髓
    纯智商题,没什么技巧,想出来就做的出来,想不出来就做不出来。
    对当前数字进行重新放置位置,比如[3,5,4,1],第一个是3,就把他放到3 - 1即第2个位置,并同时把3这个数的位置置为-1,变成[-1, 5, 3,1],同时tmp值记录下了4,进行同样的处理,4应该放到4 -1即第3个位置。。。如此下去,数组可以变成包含某些正数的数组,第一个下标和数值不一致的就是答案,当然要考虑其他特殊情况,比如全是负数,或者全是同一个数等等。case还是比较多的,容易出错。

    相关文章

      网友评论

          本文标题:数组类41--缺失的第一个正数(H)

          本文链接:https://www.haomeiwen.com/subject/ppwjectx.html