二分搜索【模板】

1、基本的二分搜索

public int binary_search(int[] nums,int target){
   int left = 0;
   int right = nums.length - 1;
   while (left <= right){
     int mid = left + (right - left) / 2;
     if (nums[mid] == target){
       return mid;
     }else if (nums[mid] > target){
       right = mid - 1;
     }else if (nums[mid] < right){
       left = mid + 1;
     }
   }
   return -1;
}

2、寻找左侧边界的二分搜索

public int left_bound(int[] nums, int target) {
   if (nums.length == 0) {
     return -1;
   }
   int left = 0;
   int right = nums.length;
   while (left < right) {
     int mid = left + (right - left) / 2;
     if (nums[mid] == target) {
       right = mid;
     } else if (nums[mid] > target) {
       right = mid;
     } else if (nums[mid] < target) {
       left = mid + 1;
     }
   }
   if (left == nums.length) {
     return -1;
   }
   return nums[left] == target ? left : -1;
 }

3、寻找右侧边界的二分搜索

public int right_bound(int[] nums, int target) {
   if (nums.length == 0) {
     return -1;
   }
   int left = 0;
   int right = nums.length;
   while (left < right) {
     int mid = left + (right - left) / 2;
     if (nums[mid] == target) {
       left = mid + 1;
     } else if (nums[mid] > target) {
       right = mid;
     } else if (nums[mid] < target) {
       left = mid + 1;
     }
   }
   if (left == 0) {
     return -1;
   }
   return nums[left - 1] == target ? (left - 1) : -1;
 }
全部评论

相关推荐

09-25 00:00
已编辑
电子科技大学 Java
球球与墩墩:这不是前端常考的对象扁平化吗,面试官像是前端出来的 const flattern = (obj) => { const res = {}; const dfs = (curr, path) => { if(typeof curr === 'object' && curr !== null) { const isArray = Array.isArray(curr); for(let key in curr) { const newPath = path ? isArray ? `${path}[${key}]` : `${path}.${key}` : key; dfs(curr[key], newPath); } } else { res[path] = curr } } dfs(obj); return res; }
查看3道真题和解析
点赞 评论 收藏
分享
迷茫的大四🐶:都收获五个了,兄弟那还说啥,不用改了,去玩吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务