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

  • 相关阅读:
    js无缝滚动
    java判断指定路径文件夹是否存在,若不存在则创建新的文件夹
    oracle使用Union时遇到列格式clob和varchar2不符,不能转的问题
    Oracle之clob字段不能union的问题
    poi导出word表格跨行
    将文件File转换成byte数组
    poi导出word表格
    JSTL跳出<c:forEach>循环
    jquery数组倒序
    [创业] 07:融资
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8761231.html
Copyright © 2011-2022 走看看