35. 搜索插入位置
- 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
- 你可以假设数组中无重复元素。
示例1:
输入: [1,3,5,6], 5
输出: 2
示例2:
输入: [1,3,5,6], 2
输出: 1
示例3:
输入: [1,3,5,6], 7
输出: 4
JAVA
思路1:
- 如果目标值(严格)大于排序数组的最后一个数,返回这个排序数组的长度,否则进入第 2 点。
- 返回排序数组从左到右,大于或者等于目标值的第 1 个数的索引。
class Solution {
public int searchInsert(int[] nums, int target) {
for(int i =0;i<nums.length;i++){
if(nums[i]>=target){
return i;
}
}
return nums.length;
}
}
思路2:
- 利用二分法查找
class Solution {
public int searchInsert(int[] nums, int target) {
int i = nums.length;
if (nums[i -1] < target){
return i;
}
int left = 0;
int right = nums.length-1;
while(left <= right){
int mid = (left + right)/2;
if (nums[mid] == target){
return mid;
}
else if (nums[mid] < target){
left = mid + 1;
}
else{
right = mid -1;
}
}
// 对于 [1,3,5,6],target = 2,返回大于等于 target 的第 1 个数的索引,此时应该返回 1
//在上面的 while (left <= right) 退出循环以后,right < left,right = 0 ,left = 1
// 根据题意应该返回 left
return left;
}
}
Python
思路3:
- 利用列表中的index、append以及sort来找出位置
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if target in nums:
return nums.index(target)
else:
nums.append(target)
nums.sort()
return nums.index(target)