Google算法题:M-寻找缺失的数

来源:互联网 发布:淘宝客链接手机端转换 编辑:程序博客网 时间:2024/06/06 18:40


http://www.jiuzhang.com/article/Google%202016%E5%B9%B412%E6%9C%88%20SDE%20Onsite%E9%9D%A2%E7%BB%8F/


http://www.lintcode.com/zh-cn/problem/find-the-missing-number/

http://www.jiuzhang.com/solutions/find-the-missing-number/

给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数。

样例

N = 4 且序列为 [0, 1, 3] 时,缺失的数为2

挑战 

在数组上原地完成,使用O(1)的额外空间和O(N)的时间。


方法一:利用下标与值的关系,将和下标相同的值放到对应下标下,没有匹配下标的就是缺失值

方法二:利用数学特性


public class Solution {    /**         * @param nums: an array of integers     * @return: an integer     */    public int findMissing(int[] nums) {        // write your code here                if(nums==null || nums.length==0) return -1;                //return find_by_exchange(nums);        return find_by_math(nums);    }        public int find_by_exchange(int[] nums){        int n = nums.length;        int i=0;        while(i<n){            while(nums[i]!=i && nums[i]<n){                int t=nums[i];                nums[i]=nums[t];                nums[t]=t;            }            i++;        }        for(int j=0; j<n; j++){            if(nums[j]!=j)                return j;        }        return n;    }        public int find_by_math(int[] nums){        int n = nums.length;        int sum=0;        for(int t:nums){            sum+=t;        }        return (0+n)*(n+1)/2-sum;    }}


原创粉丝点击