二分法|35.搜索插入位置

题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。

示例

输入: [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.搜索插入位置】

    推荐阅读