zoukankan      html  css  js  c++  java
  • 面试题53

    题目地址:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/

    题目描述

    一个长度为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

    解题思路

    二分查找:排序数组中的搜索问题,首先想到二分查找方法,通过分析题目,我们可以将数组nums分为两部分,即左子数组nums[i]=i,右子数组nums[i]!=i,而题目所求缺失的数字恰好是右子数组首元素对应的索引值。接下来,就是具体的循环二分查找,我们先求得nums中点值mid,当nums[mid]=mid时,则右子数组的首位元素一定在区间[mid+1,right]之间,此时,执行i=mid+1,否则,左子数组的末尾元素一定在区间[left,mid-1]之中,此时执行j=mid-1。

    非二分查找:我们令数组nums的大小n=nums.size()。如果n没在nums中出现的话,那么对于所有的0<=i<nums.size(),有nums[i]==i,即索引i处放置数字i,此时所求的缺失数字就是n,即nums.size(),如果n出现在nums中(出现在nums的最后一个位置),则在nums最后位置的前面有nums[i]!=i出现,此时i就是缺失的数字。

    程序源码

    二分查找

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

    非二分法

    class Solution {
    public:
        int missingNumber(vector<int>& nums) {
            if(nums.size() < 1) return 0;
            int loss_number = nums.size();
            for(int i = 0; i < nums.size(); i++)
            {
                if(nums[i] != i)
                {
                    loss_number = i;
                    break;
                }
            }
            return loss_number;
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    Mysql 之 编码问题
    Mysql Basic
    CentOS 之 Sublime text3 安装
    mapper映射
    端口号占用
    2020系统综合实验 第7次实践作业
    2020系统综合实验 第6次实践作业
    解决github打开速度慢问题
    2020系统综合实践 第5次实践作业
    2020系统综合实验 第4次实践作业
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12603042.html
Copyright © 2011-2022 走看看