题目概述
- 题目:力扣: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
收获总结
二分法要比全部遍历方便的多,要多多使用
原文地址:https://www.cnblogs.com/HanLongfeng/p/12045509.html
时间: 2024-10-08 12:55:59