/** * 题目: * 一个长度为n-1的递增排序数组中的所有数字都是唯一的, * 并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 *解题思路: * 如果中间元素的值和下标相等,那么下一轮查找只需要查找右半边; * 如果中间元素的值和下标不相等,并且它前面一个元素和它的下标相等,这意味着这中间数字正好是第一个值和下表不相等的元素, * 它的下标就是在数组中不存在的数字; * 如果中间元素的值和下标不相等,并且它前面一个元素和它的下标不相等,这意味着下一轮查找只需要在左半边查找即可。 */ public class P266_GetMissingNumber { public int GetMissingNumber(int[] array){ if (array == null || array.length == 0) { return -1; } int start = 0; int end = array.length - 1; while (start <= end) { int mid = (start + end) / 2; if (mid >= 0 && array[mid] != mid) { if (mid == 0 || array[mid - 1] == mid - 1) { return mid; } else { end = mid - 1; } } else if (array[mid] == mid) { start = mid + 1; } } if (start == array.length) return array.length; return -1; } public static void main(String[] args) { int[] array = {0, 1, 2, 3, 4}; P266_GetMissingNumber test = new P266_GetMissingNumber(); int result = test.GetMissingNumber(array); System.out.println(result); } }
剑指offer:0~n-1中缺失的数字(java)
最新推荐文章于 2020-09-09 09:10:02 发布