LintCode 寻找缺失的数 JAVA

来源:互联网 发布:app交互设计软件 编辑:程序博客网 时间:2024/05/23 19:10

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

样例

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

思路:数组是0 - (N-1)个数,先把数组从小到大排序,然后用等差数列求和公式计算出0-N个数的和,最后用求出来的和依次减去数组中的每个数,剩下的数就是缺失的数。注意当数组只有0或者只有1的处理

      import java.util.Arrays;
    public class Solution    {        public int findMissing(int[] nums)        {            Arrays.sort(nums);            int n = nums.length;            int sum = nums[n - 1] * (n + 1) / 2;            if (n == 0)                return 0;            else if (n == 1)                return nums[0] == 0 ? 1 : 0;            for (int i = 0; i < nums.length; i++)            {                sum = sum - nums[i];            }            return sum;        }    }
但是有一些数据过不了,比如N+1的数却无法找出,因为不在范围之内,于是我只能改变下顺序。
    public class Solution    {        public int findMissing(int[] nums)        {            int n = nums.length;            if (n == 0)                return 0;            else if (n == 1)                return nums[0] == 0 ? 1 : 0;            int sum = 0;            for (int i = 0; i < nums.length; i++)                sum += nums[i];            return n * (n + 1) / 2 - sum;        }    }

这样做不仅不用排序,而且能够解决N+1的数


原创粉丝点击