FirstMissingPositive

2019-04-18  本文已影响0人  瞬铭

https://leetcode.com/problems/first-missing-positive/submissions/

 public int firstMissingPositive(int[] nums) {
        int res = 1;
        for (int i = 0; i < nums.length; i++) {
            //看看这个注释的和没注释的有什么区别,注释的这个代码有个大bug,当输入数组为[1,1]的时候,这个bug就显现了
            // while ((nums[i] != i + 1) && nums[i] > 0 && nums[i] <= nums.length) {
            while (nums[i] > 0 && nums[i] <= nums.length && (nums[nums[i] - 1] != nums[i])) {
                int t = nums[i] - 1;
                int tmp = nums[i];
                nums[i] = nums[t];
                nums[t] = tmp;
            }
        }
        int i = 0;
        for (i = 0; i < nums.length; i++) {
            if (nums[i] != i + 1) {
                return i + 1;
            }
        }
        return i + 1;
    }
    /**
     * firstMissingPositive2
     * @param $nums
     * @return int
     */
    function firstMissingPositive2($nums) {
        $n = count($nums);
        for ($i = 0; $i < $n; $i++) {
            while ($nums[$i] > 0 && $nums[$i] <= $n && $nums[$nums[$i] - 1] != $nums[$i]) {
                $idx        = $nums[$i] - 1;
                $tmp        = $nums[$i];
                $nums[$i]   = $nums[$idx];
                $nums[$idx] = $tmp;
            }
        }

        for ($i = 0; $i < $n; $i++) {
            if ($nums[$i] != $i + 1) {
                return $i + 1;
            }
        }
        return $n + 1;
    }
上一篇 下一篇

猜你喜欢

热点阅读