JZ53-II. 0~n-1中缺失的数字
原题链接
描述
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例
输入: [0,1,3]
输出: 2
思路
递增排序数组,用到二分法。
正常情况下应该是:下标是多少,数组中该位置的值就应该是多少。
如果中位数的值等于索引值,说明该数及以前的数都在正确的位置上,要找到那个数在中位数的右边;
如果不等于索引值,说明要找的那个数在中位数的左边。
解答
package com.klaus.array.prob53.p2;
import org.junit.Test;
public class Solution {
public int missingNumber(int[] nums) {
int i = 0, j = nums.length - 1;
while (i <= j) {
int mid = (i + j) / 2;
if (nums[mid] == mid) i = mid + 1;
else j = mid - 1;
}
return i;
}
// public int missingNumber(int[] nums) {
// // if (nums[0] == 1) return 0;
// for (int i = 0; i < nums.length; i++) {
// if (nums[i] != i) return i;
// }
// return nums.length;
// }
@Test
public void test() {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(missingNumber(arr));
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15253414.html