leetCode 第35题,搜索插入位置

Posted hanlongfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetCode 第35题,搜索插入位置相关的知识,希望对你有一定的参考价值。

题目概述

  • 题目:力扣:35.搜索插入位置
  • 难易:简单
  • 内容:

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

    你可以假设数组中无重复元素。

    示例 1:

    输入: [1,3,5,6], 5 输出: 2

    示例 2:

    输入: [1,3,5,6], 2 输出: 1

    示例 3:

    输入: [1,3,5,6], 7 输出: 4

    示例 4:

    输入: [1,3,5,6], 0 输出: 0

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/search-insert-position

第一次思路

遍历所有元素,当该元素大于大于目标值时,将该元素的索引返回即可

Code

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int i;
        for(int i(0);i<nums.size();i++){
            if(nums[i]==target)
                return i;
            if(nums[i]>target)
                {
                    return i;
                    break;
                }

        }
        if(nums[nums.size()-1]<target)
            return i;
        return i;
    }
};

测试 Submit

技术图片

分析

该方法需要遍历所有元素,使用时间较长

改进

使用二分法
将数组分为左右两个区间,将目标值与中间位置的元素进行比较大小,确定左右两个区间。

改进Code

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int mid=0;
        int left=0;
        int right=nums.size()-1;
        while(left<right)
        {
            mid=(right-left)/2+left;
            if(target>nums[mid])
            {
                left=mid+1;
            }
            else if(target<nums[mid])
            {
                right=mid-1;
            }
            else return mid;
        }
        if(target<=nums[left])//插入位置在开头的情况
            return left;
        return left+1;//插入位置在结尾的情况
    }
};

改进Submit

技术图片

收获总结

二分法要比全部遍历方便的多,要多多使用

以上是关于leetCode 第35题,搜索插入位置的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 35. 搜索插入位置

#leetcode刷题之路35-搜索插入位置

LeetCode第3天 - 704. 二分查找 | 35. 搜索插入位置

LeetCode刷题记录_35. 搜索插入位置

leetcode35题:搜索插入位置(不是最优解法,仅供参考)

leetcode刷题记录——二分简单题