Search Insert Position
九章的模板能保证跳出,但是对跳出之后的范围处理,实际上是很麻烦的,这道题的话,考虑没有数,单个数,两个数的情况都是必要的,下面是代码
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if not nums:
return 0
start, end = 0, len(nums) - 1
while start + 1 < end:
mid = start + (end - start) / 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
start = mid
else:
end = mid
if nums[start] >= target: # target偏左
return start
elif nums[end] < target: # target在中间
return end + 1
else: # target偏右
return end
Java版本
class Solution {
public int searchInsert(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
end = mid;
} else {
start = mid;
}
}
if (nums[end] < target) {
return end + 1;
} else if (nums[start] < target) {
return end;
} else {
return start;
}
}
}