LintCode 寻找缺失的数

作者: 六尺帐篷 | 来源:发表于2017-03-19 19:55 被阅读63次

题目

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

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

分析

方法一: 求和法
由于缺失了一个元素,那么我们可以用高斯公式先求出完整的序列的和,然后求出给定数组的和,最后相减就是缺失的元素,效率高

public class Solution {
    /**    
     * @param nums: an array of integers
     * @return: an integer
     */
    public int findMissing(int[] nums) {
        // write your code here
        
        int n = nums.length;
        long sum=0;
        for(int i=0;i<n;i++) {
            sum += nums[i];
        }
        
        return (int) (0.5 * (n+1) * (n) - sum);
    }
}

方法二 交换法

我们已经知道每个位置的元素应该出现的值,那么就遍历一遍数组,如果nums【i】!=i,就把他换到它应该在的位置,最后遍历一遍就得出那个数

public class Solution {
    /**    
     * @param nums: an array of integers
     * @return: an integer
     */
    public int findMissing(int[] nums) {
        // write your code here
        int n = nums.length, 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 (i=0; i<n; ++i)
            if (nums[i]!=i) return i;
        return n;
    }
}

相关文章

  • LintCode 寻找缺失的数

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

  • lintcode 633. 寻找重复的数

    链接 题里不让我们使用额外空间,同时不能使用暴力解法。 解法一:二分法 一直数字的范围是1~n, 取其中的中点mi...

  • [leetcode/lintcode 题解] 寻找重复的数 ·

    【题目描述】 给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界),保证至少存...

  • 寻找缺失的数 missing-number

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

  • lintcode 落单的数(|,||,|||)

    (|)给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例给出 [1,2,2...

  • lintcode 丑数

    设计一个算法,找出只含素因子2,3,5 的第 n 大的数。直接寻找丑数,由定义可知,丑数是由2m,3n,5^l,因...

  • lintcode 寻找峰值

    你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的A[0] < A[1] 并且 A[n ...

  • LintCode 最大的交换数

    题目给定一个非负整数,你可以交换两个数位至多一次来获得最大的合法的数。返回最大的合法的你能够获得的数。 第一版:最...

  • [Lintcode][java]回文数

    判断一个正整数是不是回文数。样例11, 121, 1, 12321 这些是回文数。23, 32, 1232 这些不...

  • lintcode 三数之和

    给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。注意...

网友评论

    本文标题:LintCode 寻找缺失的数

    本文链接:https://www.haomeiwen.com/subject/ihdvnttx.html