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第3天 - 704. 二分查找 | 35. 搜索插入位置