美文网首页算法
LeetCode题解:搜索插入位置

LeetCode题解:搜索插入位置

作者: 搬码人 | 来源:发表于2022-03-07 10:11 被阅读0次

    题目描述

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不在数组中,返回它将会被按顺序插入的位置。
    请必须使用时间复杂度为O(logn)的算法。

    示例

    • 示例1
      输入:nums = [1,3,5,6], target = 5
      输出:2
    • 示例2
      输入:nums = [1,3,5,6], target = 2
      输出:1

    方法思路

    二分查找法

    利用双指针left和right,分别指向数组左边界和右边界。每次遍历都重新计算中间位置mid,当目标值小于或等于nums[mid]时,right左移到mid-1位置,否则left右移到mid+1位置。如此当出现while(left<=right)结束条件时,得到需求的位置。

    class Solution {
        public int searchInsert(int[] nums, int target) {
            int n = nums.length;
            int left = 0,right = n-1,result = n;
            int mid = 0;
            while(left<=right){
                 mid = ((right-left)/2)+left;
                 if(target<=nums[mid]){
                     result = mid;
                     right = mid - 1;
                 }else{
                     left = mid + 1;
                 }
            }
            return result;
        }
    }
    

    复杂度分析

    • 时间复杂度:O(logn),其中n为数组的长度。二分查找所需的时间复杂度为O(logn)。
    • 空间复杂度:O(1),我们只需要常数空间存放若干变量。

    暴力破解

    暴力破解法虽然不满足时间复杂度O(logn)的条件,但也是我们最易想到的。

    class Solution {
        public int searchInsert(int[] nums, int target) {
            int n = nums.length;
            for(int i=0;i<n;i++){
                if(target<=nums[i]){
                    return i;
                }
            }
            return n;
        }
    }
    

    相关文章

      网友评论

        本文标题:LeetCode题解:搜索插入位置

        本文链接:https://www.haomeiwen.com/subject/uewgrrtx.html