给定一个有序数组。需要插入一个元素。返回插入索引。
请必须使用时间复杂度为 O(log n) 的算法。
实例
输入: nums = [1,3,5,6], target = 5 输出: 2 输入: nums = [1,3,5,6], target = 2 输出: 1 输入: nums = [1,3,5,6], target = 7 输出: 4
二、解题思路
二分法查找位置。只需要O(log n)的时间复杂度。就是取一个中间元素,和插入的元素比较,由于是有序数组,一次即可排除一半的元素。最后定位到需要插入元素的索引位置。
三、解题方法
方法一
二分法查找
代码实现
class Solution { public int searchInsert(int[] nums, int target) { int n = nums.length; int left = 0; int right = n-1; int ans = n; while(left <= right){ int mid = (right+left)/2; if (target > nums[mid]) { left = mid +1; } else { ans = mid; right = mid - 1; } } return ans; } }