35. Search Insert Position

肯定一看就是二分搜索。问题在于数列中并没有找到这个数的情况

当退出的时候,如果nums[mid] < target的时候,说明刚才退出时因为改变了low,导致low > high所以退出了循环,所以就直接返回low

如果nums[mid] > target,说明因为改变了high退出的,所以结果是high这个位置的后面那个可以插入

考虑到如果是-1这种情况就是查在对头,所以把-1纠正成0

 

 1     public int searchInsert(int[] nums, int target) {
 2         if(nums == null || nums.length == 0) {
 3             return -1;
 4         }
 5         int low = 0;
 6         int high = nums.length - 1;
 7         int mid = 0;
 8         
 9         while(low <= high) {
10             mid = low + (high - low) / 2;
11             if(nums[mid] < target) {
12                 low = mid + 1;
13             } else if(nums[mid] > target) {
14                 high = mid - 1;
15             } else {
16                 return mid;
17             }
18         }
19         int res = 0;
20         if(nums[mid] > target) {
21             res = high + 1;
22         } else {
23             res = low;
24         }
25         return (res < 0)? 0: res;
26     }

bug记录:

21行 res = high + 1而不是high

posted @ 2016-02-27 01:03  warmland  阅读(119)  评论(0编辑  收藏  举报