不一样的二分查找 心已赠人 2023-02-09 13:17 21阅读 0赞 ## 不一样的二分查找 ## > 大家肯定一定非常熟悉二分查找法,如果面试官让你写个二分查找法,估计你会在被子里偷笑,但是如果让人查找目标值的最小索引,即如果有多个相同值,直接返回最小的索引。可以直接查出来任意一个目标值,然后向左遍历,但是还有一种优雅的方式,只要改动一两行代码 ### 普通二分查找法 ### //最普通的二分查找法 public static boolean binarySearch(int start, int end, int[]arr, int target) { if(start > end) return false; int middle = (start + end) / 2; if(arr[middle] == target) return true; if(arr[middle] > target) return binarySearch(start, middle-1, arr, target); if(arr[middle] < target) return binarySearch(middle+1, end, arr, target); return false; } ### 查找左边界的值 ### //找左侧边界 //arr =[2, 3, 4, 4, 5, 6] target = 4, 则左侧边界为2 public static int binarySearchLeft(int start, int end, int[]arr, int target) { if(start == end) { if(arr[start] != target) return -1; else return start; } int middle = (start + end) / 2; if(arr[middle] == target) return binarySearchLeft(start, middle, arr, target); if(arr[middle] > target) return binarySearchLeft(start, middle-1, arr, target); if(arr[middle] < target) return binarySearchLeft(middle+1, end, arr, target); return -1; } ### 查找右边界的值 ### //找右侧边界 //arr =[2, 3, 4, 4, 5, 6] target = 4, 则右侧边界为3 public static int binarySearchRight(int start, int end, int[]arr, int target) { if(start == end) { if(arr[start] != target) return -1; else return start; } int middle = (start + end) / 2; if(arr[middle] == target) return binarySearchRight(middle, end, arr, target); if(arr[middle] > target) return binarySearchRight(start, middle-1, arr, target); if(arr[middle] < target) return binarySearchRight(middle+1, end, arr, target); return -1; }
相关 不一样的二分查找 不一样的二分查找 > 大家肯定一定非常熟悉二分查找法,如果面试官让你写个二分查找法,估计你会在被子里偷笑,但是如果让人查找目标值的最小索引,即如果有多个相同值,直接返回最 心已赠人/ 2023年02月09日 13:17/ 0 赞/ 22 阅读
相关 二分查找 二分查找可以说是在经典不过的查找算法了,比如JAVA的库函数里,就有相应的代码实例。如下写出两个版本的二分查找,非递归和递归的 非递归的 public int bi 系统管理员/ 2022年08月06日 16:24/ 0 赞/ 89 阅读
相关 二分查找 //二分查找 /\ 递归算法 int searchB1(int A\[\], int low, int high, int data); 非递归算法 int 绝地灬酷狼/ 2022年05月12日 01:40/ 0 赞/ 83 阅读
相关 查找——二分查找 基本思想 二分查找是建立在有序顺序表基础上的!步骤如下: 1. 将表中间位置记录的关键字与给定K值进行比较,若两者相等,则查找成功。 2. 蔚落/ 2022年03月27日 03:46/ 0 赞/ 429 阅读
相关 二分查找 二分查找(先排序) typedef struct LNode List; struct LNode{ ElemenType Data[MAXSIZ 爱被打了一巴掌/ 2022年02月02日 17:13/ 0 赞/ 161 阅读
相关 二分查找 使用递归的版本 def bin_search(lst, num, start=None, end=None): """ 二分查找 àì夳堔傛蜴生んèń/ 2022年01月07日 04:03/ 0 赞/ 139 阅读
相关 二分查找 int search2( int array\[\], int n, int v) \{ int left, right, middle; 心已赠人/ 2021年12月20日 16:07/ 0 赞/ 165 阅读
相关 二分查找 二分查找 二分查找是一个比较简单的算法,用 C++ 语言实现如下: template <typename T> int binary_search( ゞ 浴缸里的玫瑰/ 2021年12月13日 03:57/ 0 赞/ 232 阅读
相关 二分查找 > 一、自己实现的 include<iostream> include<cstdio> include<algorithm> u 左手的ㄟ右手/ 2021年09月21日 17:12/ 0 赞/ 332 阅读
还没有评论,来说两句吧...