首页 > 其他分享 >LeetCode刷题(47)~0~n-1中缺失的数字

LeetCode刷题(47)~0~n-1中缺失的数字

时间:2023-01-12 14:43:44浏览次数:52  
标签:数字 missingNumber nums int 47 vector 刷题 LeetCode size

题目描述

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

解答 By 海轰

提交代码(异或

int missingNumber(vector<int>& nums) {
      int result=nums.size();
      for(int i=0;i<nums.size();++i)
      result^=i^nums[i];
      return result;
    }

运行结果
LeetCode刷题(47)~0~n-1中缺失的数字_leetcode
提交代码(差分

int missingNumber(vector<int>& nums) {
     if(nums[0]!=0) return 0;
     if(nums.size()<2) return 1;
     for(int i=1;i<nums.size();++i)
       if(nums[i]-nums[i-1]>1) return i;
       return nums.size();
    }

运行结果
LeetCode刷题(47)~0~n-1中缺失的数字_数组_02
提交代码(暴力循环

int missingNumber(vector<int>& nums) {
    for(int i=0;i<nums.size();++i)
    if(i!=nums[i]) return i;
    return nums.size();
    }

运行结果
LeetCode刷题(47)~0~n-1中缺失的数字_提交代码_03
提交代码(二分法

int missingNumber(vector<int>& nums) {
     int left=0;
    int 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;
    }

运行结果
LeetCode刷题(47)~0~n-1中缺失的数字_二分法_04

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof

标签:数字,missingNumber,nums,int,47,vector,刷题,LeetCode,size
From: https://blog.51cto.com/u_15939722/6004147

相关文章