题目来源
Leetcode 35题 搜索插入位置,链接如下
Problem: 35. 搜索插入位置
思路
- 循环之前先做一个简单的判断
- middle = left + ((right - left) / 2); 是防止溢出的等同于(left + right)/2
- 然后根据target 和 nums[right]大小比较缩小区间
- 最后的return left,说明目标值不存在于数组中,循环条件已经不满足,此时right在left左边一位,所以应该将数插入left所在位置
Code
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
int middle = 0;
//循环之前先简单判断一下
if (target < nums[left]) {
return 0;
}
if(target > nums[right]){
return right + 1;
}
//循环
while(nums[left] <= nums[right]){
middle = left + ((right - left) / 2); // 防止溢出 等同于(left + right)/2
if(target < nums[middle]) {
right = middle - 1; //说明target 在左区间,所以[left, middle - 1]
} else if(target > nums[middle]) {
left = middle + 1; //说明target 在右区间,所以[middle + 1, right]
} else {
return middle;
}
}
//目标值不存在于数组中,循环条件已经不满足,此时right在left左边一位,应该将数插入left所在位置
return left;
}
}