leetCode-Missing Number

Description:
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.

For example,
Given nums = [0, 1, 3] return 2.

Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?

My Solution:

class Solution {
    public int missingNumber(int[] nums) {
        int len = nums.length;
        int[] arr = new int[len + 1];
        for(int i = 0;i < len;i++){
            arr[nums[i]]++;
        }
        int result = 0;
        for(int i = 0;i < len + 1;i++){
            if(arr[i] == 0){
               result = i;
            }
        }
        return result;
    }
}

Better Solution:

class Solution {
    public int missingNumber(int[] nums) {
     //利用等差数列求0,1,2...n的和
        int expSum=(nums.length+1)*nums.length/2;
        //实际nums元素之和
        int actualSum=0;
        for(int num:nums){
            actualSum=actualSum+num;
        }
        相减即为缺少的数
        return expSum-actualSum;
    }
}

总结:还是得多观察元素的规律。

版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:https://www.cnblogs.com/kevincong/p/7887610.html