タイトル説明
並べ替えられた配列とターゲット値を指定して、配列内のターゲット値を見つけ、そのインデックスを返します。ターゲット値が配列に存在しない場合は、挿入される位置を順番に返します。
配列に重複する要素はないと想定できます。
例1:
入力:[1,3,5,6]、5
出力:2
例2:
入力:[1,3,5,6]、2
出力:1
例3:
入力:[1,3,5,6]、7
出力:4
例4:
入力:[1,3,5,6]、0
出力:0
問題解決のアイデア
class Solution_35 {
public int searchInsert(int[] nums, int target) {
if (target <= nums[0])
return 0;
if (target > nums[nums.length - 1])
return nums.length;
int left = 0;
int right = nums.length - 1; //定义target在左闭右闭的区间里,[left, right]
while (left <= right){
int mid = (right - left) / 2 + left; // 防止溢出 等同于(left + right)/2
if (nums[mid] > target){
right = mid - 1;
}else if (nums[mid] < target){
left = mid + 1;
}else {
return mid;
}
}
return right + 1;
}
}