leetcode搜索插入位置(二分查找)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
输入: nums = [1,3,5,6], target = 5
输出: 2
第一个想到的就是关于list
于是有了下面的代码
public static int searchInsert(int[] nums, int target) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
list.add(nums[i]);
//如果等于目标函数返回下标
if(target == nums[i]){
return i;
}
//否走插入数值Collection排序 在查找下标
else if(i==nums.length-1){
list.add(target);
Collections.sort(list);
int index = list.indexOf(target);
return index;
}
}
return -1;
}
虽然结果是对的,但是感觉代码写的和陀粑粑是的,这是看了下提示二分查找,思路瞬间打开
public int searchInsert(int[] nums, int target) {
for(int i = 0; i < nums.length;i++){
//判断值是否大于等于,如果大于等于相当于num[i]的位置直接让出来给i
if(nums[i] >= target){
return i;
}
}
//没有代表target最大,直接返回最大下标+1即length
return nums.length;
}
这就是二分查找的强大