“`java
缺失的可能是最后一个,也可能是中间的
class Solution {
public int takeAttendance(int[] records) {
int l = 0;
int r = records.length – 1;
while (l < r) {
int mid = l + (r - l)/2;
if (records[mid] == mid) {
l = mid + 1;
} else {
r = mid;
}
}
return records[l] == l ? l + 1 : l;
}
}
class Solution {
public int missingNumber(int[] nums) {
int l = 0,r = nums.length-1;
while(l<r){
int m = (r-l)/2+l;
if(nums[m]m){
l=m+1;
}else{
r=m-1;
}
}
if(nums[l]l){
return l+1;
}else{
return l;
}
class Solution {
public int missingNumber(int[] nums) {
if(nums==null||nums.length<=0){
return -1;
}
int left=0;
int right=nums.length-1;
while(left<right){
int mid=(right-left)/2+left;
if(nums[mid]>mid){
right=mid;
}else{
left=mid+1;
}
}
return left==nums[left]?left+1:left;
}
}
class Solution {
public int missingNumber(int[] nums) {
if(nums==null||nums.length==0){
return 0;
}
int left = 0;
int right = nums.length-1;
while(left <= right){
int mid = (right-left)/2+left;
if(nums[mid] >mid){
right = mid-1;
}else if(nums[mid] <= mid){
left = mid+1;
}
}
return left;
}
}
public int missingNumber(int[] nums) {
int l = 0, r = nums.length-1;
while(l <= r){
int mid = l + (r - l)/2;
if(nums[mid] == mid){
l = mid +1;
}else {
r = mid -1;
}
}
return l;
}
class Solution:
def missingNumber(self, nums: List[int]) -> int:
l, r = 0, len(nums)
while l < r:
m = (r - l) // 2 + l
if (nums[m] == m):
l = m + 1
else:
r = m
return l
class Solution {
public int missingNumber(int[] nums) {
if (nums[0] == 1) return 0; //排除0的情况
for (int i = 0; i < nums.length; i++) {
int index = i;
int value = nums[i];
if (index != value) return index;
}
return nums.length; //排除缺失最后一项的情况
}
}
class Solution {
public int missingNumber(int[] nums) {
int l=0;
int r=nums.length-1;
while(l<=r){
int mid=(l+r)/2;
if(nums[mid]==mid)
l=mid+1;
else
r=mid-1;
}
return l;
}
}
//时间O(logn) 空间O(1)
public int missingNumber(int[] nums) {
int left = 0;
int right = nums.length - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(nums[mid] > mid){
right = mid - 1;
}else{
left = mid + 1;
}
}
return left;
}
class Solution {
public int missingNumber(int[] nums) {
int left=0;
int right=nums.length-1;
while(left<=right){
int mid=(right-left)/2+left;
if(nums[mid]==mid){
left=mid+1;
}else{
right=mid-1;
}
}
return left;
}
}
class Solution {
public int missingNumber(int[] nums) {
// 根据二分查找找到与下标不一致的第一个值
int l = 0, r = nums.length - 1;
while(l < r){
int mid = l + ((r - l) >> 1);
if(nums[mid] != mid){
r = mid;
} else {
l = mid + 1;
}
}
return nums[l] == l ? l + 1 : l;
}
}
class Solution {
public int missingNumber(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = (l + r) / 2;
if (nums[mid] == mid) {
l = mid + 1;
} else {
r = mid;
}
}
return l == nums[l] ? l + 1 : l;
}
}
共以下 29 个回答
“`java
缺失的可能是最后一个,也可能是中间的
class Solution {
public int takeAttendance(int[] records) {
int l = 0;
int r = records.length – 1;
while (l < r) { int mid = l + (r - l)/2; if (records[mid] == mid) { l = mid + 1; } else { r = mid; } } return records[l] == l ? l + 1 : l; } }
class Solution {
public int missingNumber(int[] nums) {
int l = 0,r = nums.length-1;
while(l<r){
int m = (r-l)/2+l;
if(nums[m]m){
l=m+1;
}else{
r=m-1;
}
}
if(nums[l]l){
return l+1;
}else{
return l;
}
}
注意向下取整和向上取整
“`java
时间复杂度为O(logn) 空间为O(n)
class Solution {
public int missingNumber(int[] nums) {
if(nums.length==0) return -1;
}
“`C++& nums) {
int findMissingNumber(vector
int left = 0;
int right = nums.size() – 1;
}
“`
较难解释。
运用leftBound模板,最后会位于缺失数字左边,返回left即缺失数字。
【思路】找到第一个value大于index的元素,可以利用二分查找加速
【复杂度】时间O(logn),空格O(1)
直接找目标值就可以了
时间复杂度O(LOGN)
二分查找递归写法
复杂度
时间复杂度: $O(nlogn)$
空间复杂度: $O(1)$
Code
二分去找不在正确位置上的数字
思路:按照规律观察 nums[mid] 和 mid 的关系,如果 nums[mid] 和 mid 相等,则缺失的元素在右半边,如果 nums[mid] 和 mid 不相等,则缺失的元素在左半边。
时间复杂度O(logn) 空间复杂度O(1)
时间复杂度:log(n)
额外空间复杂度:O(1)
向右边寻找消失的数字
通过idx判断
二分查找
时间复杂度O(logn)
时间复杂度:log(n)
空间复杂度:O(1)
时间复杂度:O(logN)
空间复杂度:O(1)
时间复杂度:O(logN)
空间复杂度:O(1)
c++实现& nums) {
int missingNumber(vector
int left = 0,right=nums.size()-1;
while(left<=right)
{
int mid = (left+right)/2;
if(nums[mid]mid)
{
left = mid+1;
}
else
{
right = mid-1;
}
}
return left;
}
二分查找
时间:O(logn)
空间:O(1)
MY