码迷,mamicode.com
首页 > 其他好文 > 详细

leetCode 第35题,搜索插入位置

时间:2019-12-15 20:15:17      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:位置   --   com   内容   problem   二分   search   position   遍历   

题目概述

  • 题目:力扣: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题,搜索插入位置

标签:位置   --   com   内容   problem   二分   search   position   遍历   

原文地址:https://www.cnblogs.com/HanLongfeng/p/12045509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!