zoukankan      html  css  js  c++  java
  • 268 Missing Number 缺失的数字

    给出一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
    案例 1
    输入: [3,0,1]
    输出: 2
    案例 2
    输入: [9,6,4,2,3,5,7,0,1]
    输出: 8
    注意事项:
    您的算法应该以线性复杂度运行。你能否仅使用恒定的额外空间复杂度来实现它?

    详见:https://leetcode.com/problems/missing-number/description/

    Java实现:

    方法一:

    class Solution {
        public int missingNumber(int[] nums) {
            int res=nums.length;
            int i=0;
            for(int num:nums){
                res^=num;
                res^=i;
                ++i;
            }
            return res;
        }
    }
    

    方法二:

    class Solution {
        public int missingNumber(int[] nums) {
            int n=nums.length;
            int sum=0;
            for(int num:nums){
                sum+=num;
            }
            return (int)(0.5*n*(n+1)-sum);
        }
    }
    

    方法三:

    用二分查找法算出中间元素的下标,然后用元素值和下标值之间做对比,如果元素值大于下标值,则说明缺失的数字在左边,此时将r赋为m,反之则将l赋为m+1。排序的时间复杂度都不止O(n),但是在面试的时候,有可能数组就是排好序的,那么此时用二分查找法肯定要优于上面两种方法。

    class Solution {
        public int missingNumber(int[] nums) {
            Arrays.sort(nums);
            int l=0;
            int r=nums.length;
            while(l<r){
                int m=(l+r)>>1;
                if(nums[m]>m){
                    r=m;
                }else{
                    l=m+1;
                }
            }
            return r;
        }
    }

    参考:https://www.cnblogs.com/grandyang/p/4756677.html

  • 相关阅读:
    混淆
    【虚拟DOM】√
    fn
    notebook
    sourceMappingURL
    十进制转换为十六进制
    关于this和super的区别
    类中访问级别
    Java中字符串解析
    IWorkspace操作
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8761231.html
Copyright © 2011-2022 走看看