leetcode (Missing Number)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hsx1612727380/article/details/84434185

Title:Missing Number   268

Difficulty:Easy

原题leetcode地址:https://leetcode.com/problems/missing-number/

1. 申请了额外的空间,在新申请的空间中将nums重新排序,然后找到当前位置上的数与位置的值不同(类似于排序)

时间复杂度:O(n),两次for循环,但都是一层,遍历整个数组的长度。

空间复杂度:O(n),申请一个n长度的数组。

    /**
     * 申请了额外的空间,在新申请的空间中将nums重新排序,然后找到当前位置上的数与位置的值不同
     * @param nums
     * @return
     */
    public static int missingNumber(int[] nums) {

        if (nums == null || nums.length <= 0) {
            return 0;
        }

        int n[] = new int[nums.length + 1];

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

        int flag = 0;
        for (int i = 1; i < n.length; i++) {
            if (n[i] == 0) {
                flag = i;
            }
        }

        return flag;

    }

2. 先计算0~n的和,再计算nums中数的和,最后相减就是结果

时间复杂度:O(n),一次一层for循环,遍历整个数组的长度。

空间复杂度:O(1),没有申请额外的空间。

    /**
     * 将0~n想加求和S1,再将nums中的想加求和S2,S1-S2就是最后的结果
     * @param nums
     * @return
     */
    public static int missingNumber1(int[] nums) {

        if (nums == null || nums.length <= 0) {
            return 0;
        }

        int result = nums.length;
        for (int i = 0; i < nums.length; i++) {
            result += i - nums[i];
        }

        return result;
    }

猜你喜欢

转载自blog.csdn.net/hsx1612727380/article/details/84434185