搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
这道题最后一句设置了限制,针对我明显设置了限制,不许用暴力。哇,这可如何是好!!好了直接看题解,哦哦!看完了,可以知道这是一道完美的二分法的题目。很经典的题目,还是一个经典的套娃题。可以说是一个将二分法的思想完全使用了java代码实现的典型实例。以后完全可以仿照这个模板来写其他的二分查找的题目,好了不多说!上菜
题解:
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, 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;
}
}
return left;
}
}
这道题解的精髓就是不需要考虑这个数组是升序还是降序。我们只要知道这个是一个顺序数组就行了。在其他角度上,减少了我们对数据的判断。这样完全可以减少数据流的反复使用。这个二分查找是我第一次遇到,长知识了!!