二分查找的应用场景

Posted JAVA技术大揭底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找的应用场景相关的知识,希望对你有一定的参考价值。

给定一个先降序后升序数组,求最小值,时间复杂度小于o(n)
插入排序的思想实现这个需求的时间复杂度为o(n),快排、归并排序的时间复杂度为nlogn,这几种方式都不适用。但是快排和归并排序中都用到了二分思想,同理由于数组是先降序后升序的,使用二分查找的方式先将数组从中间分成2部分,比较中间值的前后相邻元素大小,如果3个值程递增形式,说明最小值在前半部分,再以递归的方式在前半部分查找,如果这三个值程递减形式,说明最小值在后半部分,再以递归的方式在后半部分查找,这样递归调用,直到中间值都小于前后的相邻值时,中间值就是最小的。整个思路流程图如下:



看代码:

public static int getMinByBinarySearch(int[] arr, int begin, int end){    //如果就剩最后两个元素了 就从中选一个较小的返回
if(end - begin == 1) { if(arr[begin] > arr[end]) { return arr[end]; } else { return arr[begin]; } }    //中间位置 int mid = (begin + end) / 2;    //比较中间位置两边的相邻值 if(arr[mid] <= arr[mid+1]) {        //程递增趋势 就递归从前半部分查找 if(arr[mid] >= arr[mid-1]) { return getMinByBinarySearch(arr, begin, mid); } else {            //两边大于中间说明是最小值  因为是先降序后升序的数组 return arr[mid]; } } else {        //程递减趋势 就从后半部分查找 return getMinByBinarySearch(arr, mid, end); }}

这样实现的话时间复杂度就是O(n),符合要求。

以上是关于二分查找的应用场景的主要内容,如果未能解决你的问题,请参考以下文章

Kafka中改进的二分查找算法

二分查找的最简单模版

二分查找

二分查找法

邀请大神——二分查找

数据结构与算法——查找算法-插值查找