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

  • 相关阅读:
    【windows 10 安装docker for windows】
    【windows本地修改git账号、路径信息】
    【echarts】简单使用流程(java)
    【MySql】explain
    【thymeleaf-标签】th:with
    【MongoDB】Windows:安装与启动
    【thymeleaf-标签】th:if
    Thread类中interrupt()、interrupted()和isInterrupted()方法详解
    java中的锁
    LinkedList集合详解
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8761231.html
Copyright © 2011-2022 走看看