题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例
输入: [1,3,5,6], 5
输出: 2
思路1
直接遍历,时间复杂度为O(n)。
代码1
class Solution {
public:
int searchInsert(vector& nums, int target) {
int n = nums.size();
if (n == 0 || nums[0] >= target) return 0;
if (nums[n-1] < target) return n;
for (int i = 1;
i < n;
++i){
if (nums[i] == target) return i;
if (nums[i] > target && nums[i-1] < target) return i;
}
return n;
}
};
思路2
二分查找思路。
时间复杂度O(logn)。
代码2
class Solution {
public:
int searchInsert(vector& nums, int target) {
if (nums.size() < 1) return 0;
return binarySearch(nums, 0, nums.size()-1, target);
}int binarySearch(vector& nums, int left, int right, int target){
if (left > right) return left;
int mid = (right + left) / 2;
if (nums[mid] == target) return mid;
else if (nums[mid] > target) return binarySearch(nums, left, mid-1, target);
else return binarySearch(nums, mid+1, right, target);
}
};
【二分法|35.搜索插入位置】
推荐阅读
- 数据结构与算法|【算法】力扣第 266场周赛
- leetcode|今天开始记录自己的力扣之路
- Python|Python 每日一练 二分查找 搜索旋转排序数组 详解
- 【LeetCode】28.实现strstr() (KMP超详细讲解,sunday解法等五种方法,java实现)
- LeetCode-35-搜索插入位置-C语言
- leetcode python28.实现strStr()35. 搜索插入位置
- Leetcode Permutation I & II
- python|leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
- LeetCode 28 Implement strStr() (C,C++,Java,Python)
- Python|Python Leetcode(665.非递减数列)