zoukankan      html  css  js  c++  java
  • 268. Missing Number

    268. Missing Number

    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?

    题意: 从0..n中随机选n个不同的数入数组, 注意:数组乱序. 找出缺失的那个数.
    三种方法, XOR, sum, 二分查找(要求数组sorted).

    人家牛逼想法:XOR
    XOR 相同为0不同为1.
    0 ^ 1 ^ 2 ^ 3 ^ 2 ^ 1 ^ 0 = 3.

    (O(n)) time, (O(1)) extra space. 比下面的sum还快.

    // xor 位运算
    int missingNumber(vector<int>& A) {
        int re = 0;
        for (int i = 1; i <= A.size(); i++)
            re = re ^ i ^ A[i - 1];
        return re;
    }
    

    SUM方法:
    (O(n)) time, (O(1)) extra space.

    // 0..size()和 - 数组和
    int missingNumber(vector<int>& A) {
        int sum = 0, n = A.size();
        for (int i = 0; i < n; i++)
            sum += A[i];
        int re = (n * (n + 1)) / 2 - sum;
        return re;
    }
    
  • 相关阅读:
    泛型的内部原理:类型擦除以及类型擦除带来的问题
    Redis的那些最常见面试问题
    线程池全面解析
    对线程调度中Thread.sleep(0)的深入理解
    集群环境下Redis分布式锁
    3.8
    3.7
    3.6任务
    3.5任务
    3.4
  • 原文地址:https://www.cnblogs.com/ZhongliangXiang/p/7356536.html
Copyright © 2011-2022 走看看