【问题描述】[中等]
【解答思路】
二分法
时间复杂度:O(LogN) 空间复杂度:O(1)
public class Solution {public int searchInsert(int[] nums, int target) {int len = nums.length;if (len == 0) {return 0;}// 特判if (nums[len - 1] < target) {return len;}int left = 0;int right = len - 1;while (left < right) {int mid = left + (right - left) / 2;// 严格小于 target 的元素一定不是解if (nums[mid] < target) {// 下一轮搜索区间是 [mid + 1, right]left = mid + 1;} else {// 下一轮搜索区间是 [left, mid]right = mid;}}return left;}
}
public class Solution {public int searchInsert(int[] nums, int target) {int len = nums.length;if (len == 0) {return 0;}int left = 0;// 因为有可能数组的最后一个元素的位置的下一个是我们要找的,故右边界是 lenint right = len;while (left < right) {int mid = left + (right - left) / 2;// 小于 target 的元素一定不是解if (nums[mid] < target) {// 下一轮搜索的区间是 [mid + 1, right]left = mid + 1;} else {// 下一轮搜索的区间是 [left, mid]right = mid;}}return left;}
}
【总结】
1. 二分查找的思想
减而治之,即将大规模问题转化成小规模问题。减而治之是分而治之的特例,将大问题划分成若干个子问题以后,最终答案只在其中一个子问题里。
3.去中间数
int mid = left + (right - left) / 2;
int mid = (left + right) >>> 1;
3.排除法思想
4.二分查找模板 一般步骤
5. 与其他二分查找的比较
6. 二分法整理
作者:liweiwei1419
链接:https://leetcode-cn.com/problems/search-insert-position/solution/te-bie-hao-yong-de-er-fen-cha-fa-fa-mo-ban-python-/