二分搜索的拓展用法
来源:互联网 发布:中科院算法答案 编辑:程序博客网 时间:2024/05/21 18:45
二分搜索的拓展用法
二分搜索想必大家比较熟悉了,这里给出两道二分搜索的变形的题目。
<span style="font-size:18px;">public class BinarySearch {/* * 题目一: * 给定一个未排序的数组,使用二分搜索的方法查找其中最大的那个数(求最小的方法一样) *//** * * @param a 要查找的最大值所在的数组 * @param n 数组的最大范围 * @param st 要查找的开始坐标 * @param end 要查找的终结坐标 * @return 最大值 */private static int search(int[] a,int n,int st,int end){if(n==1){return a[st];}int mid = (st+end)/2;int num1 = search(a,n-n/2, st, st+mid);int num2 = search(a, n/2,mid+1, end);return num1>num2?num1:num2;}/* * 题目二: * 设a[0:n-1]是已排好序的数组。改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素的位置j。 * 当搜索元素在数组中时,i和j相同,均为x在数组中的位置 */static int i,j;/** * * @param a 已经排好序的数组 * @param n 数组中元素的个数 * @param x 要查找的数 */private static void search2(int[] a,int n,final int x){int left=0;int right = n-1;while(left<=right){int middle = (left+right)/2;if(x==a[middle]){i = j = middle;return;//找到了该元素即结束查找}else if(x>a[middle]){i = middle;left = middle+1;}else{j = middle;right = middle-1;}}}public static void main(String[] args){/*************题目一*****************/int[] a = {3,1,7,5,9};int max = search(a,4, 0, 4);System.out.println(max);/*************题目二*****************/int[] b = {1,4,6,9,13,16};search2(b, 6, 8);System.out.println("i="+i+" j="+j);}}</span>
1 0
- 二分搜索的拓展用法
- 查找专题——二分搜索及其拓展
- 关于二分查找的应用拓展
- 无处不在的二分搜索
- 二分搜索的应用
- 二分搜索的总结
- 二分查找拓展
- 二分查找及拓展
- 二分查找及其拓展
- 二分搜索(折半搜索)的实现
- 二分搜索与三分搜索的应用
- 正确的二分搜索代码
- 二分搜索的java实现
- 二分搜索的巧妙应用
- 二分搜索的总结(续)
- poj1064二分搜索的应用
- 二分搜索的区间问题
- 递归实现的二分搜索
- redis在window下安装
- 合并 plugin-cfg.xml 配置文件
- ffmpeg增加264编码
- iOS开发 如何让navigationBar不半透明
- Spring - Spring容器概念及其初始化过程
- 二分搜索的拓展用法
- 清理无用的CSS样式比较有用的几个工具
- HTML学习6:表单格式化
- LinearLayout布局摆脱android:supportsRtl影响
- 抄书问题
- sftp 工具类
- robot operating system概述
- web项目遇到classnotfound错误的解决
- Plexus——Spring之外的IoC容器