35. 搜索插入位置

115 阅读1分钟

搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 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;
    }
}

这道题解的精髓就是不需要考虑这个数组是升序还是降序。我们只要知道这个是一个顺序数组就行了。在其他角度上,减少了我们对数据的判断。这样完全可以减少数据流的反复使用。这个二分查找是我第一次遇到,长知识了!!