博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异序二分查找 二分查找方程根 二分查找重复元素最后一个
阅读量:4326 次
发布时间:2019-06-06

本文共 2765 字,大约阅读时间需要 9 分钟。

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:  -1Try find 3's index in array:  7Try find 5's index in array:  9Try find 15's index in array:  5The array2: 9 11 14 1 2 3 4 5 6 7 Try find 1's index in array2:  3Try find 3's index in array2:  5Try find 5's index in array2:  7Try 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:  -1Try find 3's last index in array:  1Try find 4's last index in array:  3Try find 11's last index in array:  11Try find 16's last index in array:  17

转载于:https://www.cnblogs.com/liyuquan/p/8678237.html

你可能感兴趣的文章
MySQL 处理重复数据
查看>>
关于typedef的用法总结(转)
查看>>
【strtok()】——分割字符串
查看>>
Linux下安装rabbitmq
查看>>
曹德旺
查看>>
【转】判断点在多边形内(matlab)
查看>>
java基础之集合:List Set Map的概述以及使用场景
查看>>
Python 线程 进程 协程
查看>>
iOS语言中的KVO机制
查看>>
excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法
查看>>
响应式web设计之CSS3 Media Queries
查看>>
实验三
查看>>
机器码和字节码
查看>>
环形菜单的实现
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>
Centos 7 Mysql 最大连接数超了问题解决
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>