二分查找
1 非减序列查找目标值
思路:直接使用闭区间二分查找,闭区间二分查找优点,若查找的数不在,返回的是插入位置
java">public int searchBin20241020(int[] nums, int target){int n = nums.length;int left = 0, right = n - 1;while (left <= right){int mid = left + (right - left) / 2;if (nums[mid] < target){left = mid + 1;}else {right = mid - 1;}}return left;}
2 在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)
这里可以看一下:二分查找 红蓝染色法_哔哩哔哩_bilibili 这位up的讲解,讲的很到位 ,看完能知道 >= > < <= 之间的转换。对这题至关重要
java">public int[] searchRange(int[] nums, int target) {int start = binsearch(nums, target); //>= 注意整数中 >x 可转成 >=x+1;<x 可转成 (>=x)-1; <=x 可转成 (>x)-1 ==> (>=x+1)-1if (start == nums.length || nums[start] != target){return new int[]{-1,-1};}int end = binsearch(nums, target + 1) - 1; //<=return new int[]{start, end};}public int binsearch(int[] nums, int target){int left = 0, right = nums.length - 1;while (left <= right){int mid = left + (right - left) / 2;if (nums[mid] < target){left = mid + 1;}else{right = mid - 1;}}return left;}