zoukankan      html  css  js  c++  java
  • 剑指 Offer 53

    一、题目描述

    一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
    示例 1:
    输入: [0,1,3]
    输出: 2
    示例 2:
    输入: [0,1,2,3,4,5,6,7,9]
    输出: 8
    限制:
    1 <= 数组长度 <= 10000

    二/题解
    有序数组,使用二分法
    时间复杂度:O(log n)
    在这里插入图片描述

    class Solution {
        public int missingNumber(int[] nums) {
            if(nums[0]!=0) return 0;
            int n = nums.length;
            int left = 0,right = n-1;
            
            while(left <= right){
                int mid = left + ((right - left)>>1);
                if(nums[mid]!=mid&&nums[mid-1]==mid-1)
                    return mid;
                else if(nums[mid]==mid)
                    left = mid + 1;
                else
                    right = mid - 1;
            }
            return n;
        }
    }
    

    优化:

    class Solution {
        public int missingNumber(int[] nums) {
            
            int left = 0,right = nums.length-1;
            
            while(left <= right){
                int mid = left + ((right - left)>>1);
                if(nums[mid]==mid)
                    left = mid + 1;
                else
                    right = mid - 1;
            }
            return left;
        }
    }
    

    在这里插入图片描述

    方法二:异或
    如果数组无序,可使用异或
    数组的长度为n-1,且数字范围都在0到n-1内,我们将数组中的n-1个数字与0到n-1共n个数依次进行异或,异或相同的数字得000,最后剩下来的就只有缺失的数字
    时间复杂度:o(n)

    class Solution {
    public:
        int missingNumber(vector<int>& nums) {
            int res = nums.size();
            for(int i = 0;i < nums.size();i++){
                res ^= nums[i] ^ i;
            }
            return res;
        }
    };
    

    在这里插入图片描述

  • 相关阅读:
    Jquery清除style样式
    合并单元格式
    SQL根据下标,返回split分割后字符串
    js功能比较全面的yyyyMMdd格式的日期验证正则
    DataTable to Json
    List<T>下的Find,FindAll等条件过滤函数的使用方法
    获取iframe内部DOM对象
    PowerDesigner取消Name与Code同步
    再次回归
    最近遇到一个比较有意思的题目
  • 原文地址:https://www.cnblogs.com/ttzz/p/14409903.html
Copyright © 2011-2022 走看看