异序二分查找 二分查找方程根 二分查找重复元素最后一个 Dear 丶 2023-05-31 06:42 4阅读 0赞 原文链接:http://www.cnblogs.com/liyuquan/p/8678237.html 1 题目1 类二分查找 1.1 题目 将有序数组a的后面随机一段一插到数组前面,使用类似二分查找的方法,查找一个元素e。 1.2 解题思路 将有序数组的后面一部分插到数组前面,使用二分查找查找一个元素。 这样的查找,可以首先定义一个mid代表中间位置。 随后,首先判断mid所在位置,是在被插到前面数值较大的一段,还是原本数值较小的一段。 如果在前面较大数值一段,则再判断目标元素是否在这一段中间,在则将高位hi移动到mid,否则移动低位lo到mid 如果在后面较小数值一段,则再判断目标元素是否在这一段中间,在则移动低位lo到mid,否则将高位hi移动到mid 判断lo和hi位置的数值是否为目标值,是则返回下标,不是则返回-1 1.3 Java实现代码 public static int binSearch(int\[\] array, int n) \{ int lo = 0; int hi = array.length - 1; int mid = (lo + hi) >> 1; while(lo+1 < hi) { mid = (lo + hi) >> 1; if (array[lo] <= array[mid]) //前面一段 if (array[lo] <= n && n <= array[mid]) hi = mid; else lo = mid; else if(array[mid] <= n && n <= array[hi]) lo = mid; else hi = mid; } if(array[lo] == n) return lo; if(array[hi] == n) return hi; return -1; \} 1.4 测试结果 The array: 7 8 9 11 14 15 2 3 4 5 Try find 1’s index in array: -1 Try find 3’s index in array: 7 Try find 5’s index in array: 9 Try find 15’s index in array: 5 The array2: 9 11 14 1 2 3 4 5 6 7 Try find 1’s index in array2: 3 Try find 3’s index in array2: 5 Try find 5’s index in array2: 7 Try find 15’s index in array2: -1 2 题目2 类二分查找方程根 2.1 题目 已知方程为 x^3-x+4 = 0 的根在 \[-5, 0\] 内,请使用二分查找的求解方法寻找到方程的近似根,要求保留四位小数 2.2 解题思路 类二分查找方程的根,可以将循环判断条件改变达到目的。 这样的查找,可以首先定义一个mid代表中间位置。 随后,首先循环判断高位hi减去低位lo是否到达目标精度 再在循环内部判断高位hi和中间位置mid的函数值是否为正 为正则说明根不在\[lo, hi\]内,将lo移动到mid位置 不为正则说明在,将hi移动到mid位置 返回mid位置 2.3 Java实现代码 public static double result\_search(double lo, double hi) \{ double mid = (lo + hi) / 2; while(hi-lo > 0.00001)\{ mid = (lo + hi) / 2; if( f(lo)\*f(mid) > 0 )\{ lo = mid; \} else if( f(hi)\*f(mid) > 0 )\{ hi = mid; \} \} return mid; \} public static double f(double x)\{ return x*x*x -x + 4; \} 2.4 测试结果 Try to search the root of the equation below: x^3 -x + 4 = 0 (Assert there is only one root of the equation) \-1.7963 3 题目3 二分查找最后一个值 3.1 题目 实现二分搜索中如果有多个重复的数,返回最后一个, 3.2 解题思路 利用二分查找找到目标元素出现的第一个和最后一个位置,只需要对于二分查找的退出条件,做一个简单的设定就能得到我们理想的结果,其他都跟二分搜索类似 3.3 Java实现代码 public static int lastSearch(int\[\] array, int n) \{ int lo = 0; int hi = array.length - 1; int mid = (lo + hi) >> 1; while(lo < hi) { mid = (lo + hi + 1) >> 1; if(array[mid] > n) hi = mid - 1; else lo = mid; } if(array[hi] == n) return hi; return -1; \} 3.4 测试结果 The array: index: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 value: 2 3 4 4 5 7 8 9 11 11 11 11 14 15 16 16 16 16 Try find 1’s last index in array: -1 Try find 3’s last index in array: 1 Try find 4’s last index in array: 3 Try find 11’s last index in array: 11 Try find 16’s last index in array: 17 转载于:https://www.cnblogs.com/liyuquan/p/8678237.html
相关 异序二分查找 二分查找方程根 二分查找重复元素最后一个 原文链接:http://www.cnblogs.com/liyuquan/p/8678237.html 1 题目1 类二分查找 1.1 题目 将有序数组a的后面随机 Dear 丶/ 2023年05月31日 06:42/ 0 赞/ 5 阅读
相关 二分查找 二分查找可以说是在经典不过的查找算法了,比如JAVA的库函数里,就有相应的代码实例。如下写出两个版本的二分查找,非递归和递归的 非递归的 public int bi 系统管理员/ 2022年08月06日 16:24/ 0 赞/ 37 阅读
相关 二分查找 //二分查找 /\ 递归算法 int searchB1(int A\[\], int low, int high, int data); 非递归算法 int 绝地灬酷狼/ 2022年05月12日 01:40/ 0 赞/ 20 阅读
相关 查找——二分查找 基本思想 二分查找是建立在有序顺序表基础上的!步骤如下: 1. 将表中间位置记录的关键字与给定K值进行比较,若两者相等,则查找成功。 2. 蔚落/ 2022年03月27日 03:46/ 0 赞/ 358 阅读
相关 二分查找 二分查找(先排序) typedef struct LNode List; struct LNode{ ElemenType Data[MAXSIZ 爱被打了一巴掌/ 2022年02月02日 17:13/ 0 赞/ 106 阅读
相关 二分查找 使用递归的版本 def bin_search(lst, num, start=None, end=None): """ 二分查找 àì夳堔傛蜴生んèń/ 2022年01月07日 04:03/ 0 赞/ 80 阅读
相关 二分查找 int search2( int array\[\], int n, int v) \{ int left, right, middle; 心已赠人/ 2021年12月20日 16:07/ 0 赞/ 95 阅读
相关 二分查找 二分查找 二分查找是一个比较简单的算法,用 C++ 语言实现如下: template <typename T> int binary_search( ゞ 浴缸里的玫瑰/ 2021年12月13日 03:57/ 0 赞/ 163 阅读
相关 二分查找 > 一、自己实现的 include<iostream> include<cstdio> include<algorithm> u 左手的ㄟ右手/ 2021年09月21日 17:12/ 0 赞/ 270 阅读
还没有评论,来说两句吧...