package com.example.demo;
/**
* @email 930312043@qq.com
* @author: zhaoshuai
* @date: 2021/7/31 22:12
*/
public class LeetCode {
int binarySearch(int[] nums, int target){if(nums == null && nums.length ==0){return -1;}
int l =0;
int r = nums.length - 1;
int mid =0;while(l < r){
mid = l + ((r - l)>>1);if(nums[mid]> target){
r = mid - 1;}elseif(nums[mid]< target){
r = mid + 1;}elseif(nums[mid]== target){return mid;}}return l;}}
2在arr上,找满足>= value的最左位置
package com.example.demo;
/**
* @email 930312043@qq.com
* @author: zhaoshuai
* @date: 2021/7/31 22:12
*/
public class LeetCode {
int rightBound(int[] nums, int target){if(nums == null && nums.length ==0){return -1;}
int l =0;
int r = nums.length - 1;
int mid =0;
// 记录最左的下标
int index = -1;while(l <= r){
mid = l + ((r - l)>>1);if(nums[mid]>= target){
index = mid;
r = mid - 1;}else{
l = mid + 1;}}return index;}}
3局部最小值
package com.example.demo;
/**
* @email 930312043@qq.com
* @author: zhaoshuai
* @date: 2021/7/31 22:12
*/
public class LeetCode {
int exist(int[] nums){if(nums == null && nums.length ==0){return -1;}if(nums.length ==1|| nums[0]< nums[1]){return0;}if(nums.length >=2&& nums[nums.length - 1]< nums[nums.length - 2]){return nums.length - 1;}
int l =1;
int r = nums.length - 2;
int mid =0;while(l < r){
mid = r + ((r - l)>>1);if(nums[mid]> nums[mid - 1]){
r = mid - 1;}elseif(nums[mid]> nums[mid + 1]){
l = mid + 1;}else{return mid;}}return l;}}