给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路1:暴力实现,遍历所有序列找到第一个不大于target的数,没找到就返回尾后位置。
class Solution { public: int searchInsert(vector<int>& nums, int target) { int k = 0; for(auto i : nums) { if(i>=target) return k; k++; } return nums.size(); } };思路二:用二分查找实现,复杂度为O(logn),这里的二分查找是优化过的,参考邓俊辉的数据结构课程,并且要判断一下target小于所有值的情况。
class Solution { public: int searchInsert(vector<int>& nums, int target) { int lo = 0; int hi = nums.size(); if(target < nums[0]) return 0; while(1 < hi - lo) { int mi = (lo + hi) >> 1; (target < nums[mi])? hi = mi : lo = mi; } return (target==nums[lo])? lo : hi; } };