二分查找(一次查找多个相同的值)

package com.atguigu.search;import java.util.ArrayList;
import java.util.List;/*** @创建人 wdl* @创建时间 2021/3/23* @描述*/
//注意:使用二分查找的前提是,该数组是有序的
public class BinarySearch {public static void main(String[] args) {int arr[]={1,8,10,89,1000,1000,1234};int resIndex=binarySearch(arr,0,arr.length-1,-1);System.out.println("resIndex:"+resIndex);List<Integer> resIndexList = binarySearch2(arr, 0, arr.length - 1, 1000);System.out.println("resIndexList="+resIndexList);}//二分查找算法/**** @param arr 数组* @param left 左边的索引* @param right 右边的索引* @param findVal 要查找的值* @return 如果找到就返回下标,如果没有找到,就返回-1*/public static int binarySearch(int[] arr,int left,int right,int findVal){//当left>right时,说明递归整个数组,但是没有找到if(left>right){return -1;}int mid=(left+right)/2;int midVal=arr[mid];if(findVal>midVal){//向右递归return binarySearch(arr,mid+1,right,findVal);}else if(findVal<midVal){//向左递归return binarySearch(arr,left,mid-1,findVal);}else {return mid;}}//完成一个课后思考题
//    {1,8, 10, 89, 1000, 1000,1234} 当一个有序数组中,
//    有多个相同的数值时,如何将所有的数值都查找到,比如这里的 1000.//思路分析//1.在找到mid值,不要马上返回//2.向mid索引值得左边扫描,将所有满足1000,的元素的下标,加入到集合中ArrayList//3.向mid索引值得右边扫描,将所有满足1000,的元素的下标,加入到集合中ArrayList//4.将ArrayList返回public static ArrayList<Integer> binarySearch2(int[] arr, int left, int right, int findVal){//当left>right时,说明递归整个数组,但是没有找到if(left>right){return new ArrayList<Integer>();}int mid=(left+right)/2;int midVal=arr[mid];if(findVal>midVal){//向右递归return binarySearch2(arr,mid+1,right,findVal);}else if(findVal<midVal){//向左递归return binarySearch2(arr,left,mid-1,findVal);}else {ArrayList<Integer> resIndexlist = new ArrayList<>();//向mid索引值得左边扫描,将所有满足1000,的元素的下标,加入到集合中ArrayListint temp=mid-1;while(true){if(temp<0||arr[temp]!=findVal){//退出break;}//否则,就把temp放入到集合中resIndexlist.add(temp);temp--;//temp左移}resIndexlist.add(mid);//向mid索引值得右边扫描,将所有满足1000,的元素的下标,加入到集合中ArrayListtemp=mid+1;while(true){if(temp>arr.length-1||arr[temp]!=findVal){//退出break;}//否则,就把temp放入到集合中resIndexlist.add(temp);temp++;//temp左移}return resIndexlist;}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

介绍Portable PDB

为了调试编译的应用程序&#xff0c;有必要将IL代码或二进制的机器代码与源代码行进行匹配。虽然数据可以嵌入在应用程序中&#xff0c;但这会显著增加EXE或DLL文件的大小。取而代之的是&#xff0c;通常会使用单独的“symbols”文件。在Windows平台上&#xff0c;这被称为PDB或…

RedisGeo实现增删改查 java计算指定坐标最近的距离并排序

利用Redis的Geo功能实现查找附近的位 - 云社区 - 腾讯云 package com.easy.hotel.pms.util;import com.easy.hotel.common.data.tenant.TenantContextHolder; import com.easy.hotel.pms.mapper.CommunityMapper; import com.easy.hotel.pms.service.impl.CommunityServiceImpl…

openglshader实现虚拟场景_opengl+shader

1、环境介绍&#xff1a;】软件 &#xff1a;visual studio编程语言&#xff1a;opengl库 &#xff1a;glad glfw【2、内容介绍】-- 绘制场景&#xff1a;场景1&#xff1a; 一片沙漠中&#xff0c;一本书&#xff0c;四周出现 5 个自球&#xff0c;逐渐被黑雾笼罩场景2&#x…

没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

今天在开发指纹识别的项目时候&#xff0c;出现了个问题&#xff0c;这个问题之前也没有见过&#xff0c;所以无从下手&#xff0c;只能从网上找解决方法&#xff0c;找了半天说要注册com组件啥的&#xff0c;我老是注册不成功&#xff0c;后来瞎捣鼓终于解决了&#xff0c;原因…

JS获取自定义属性data-*值与dataset

转载自 JS获取自定义属性data值 <body> <div id"tree" data-leaves"47" data-plant-height"2.4m"></div> <script> var tree document.getElementById("tree"); //getAttribute()取值属性 console.log(tr…

插值查找+代码实现+注意事项

图解 代码实现 package com.atguigu.search;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ public class InsertValueSearch {public static void main(String[] args) {int[] arrnew int[100];for (int i 0; i < 100; i) {arr[i]i1;}// S…

SQL Server on Linux的文件和目录结构

问题引入 “鸟儿啊&#xff0c;我记得你写过一篇《SQLServer On Linux Package List on CentOS》的文章&#xff0c;从这篇文章&#xff0c;我们很清楚的知道了SQL Server on Linux包含有哪些必要的包。那么&#xff0c;我们怎么知道SQL Server on Linux到底包含哪些重要的文件…

3级调度 fpga_FPGA的软核、硬核、固核

“核”现在的FPGA设计&#xff0c;规模巨大而且功能复杂&#xff0c;因此设计的每一个部分都从头开始是不切实际的。一种解决的办法是&#xff1a;对于较为通用的部分可以重用现有的功能模块&#xff0c;而把主要的时间和资源用在设计中的那些全新的、独特的部分。这就像是你在…

ssm中spring mvc找不到控制器,报错404

今晚在整合ssm的时候&#xff0c;出现了个错误&#xff0c;自己的都感觉醉了。之前没学过spring mvc&#xff0c;所以做起来感觉有点很陌生&#xff0c;在网上看了看代码之后就呼呼呼的写代码了。写了2小时&#xff0c;终于把环境搭建好了。然后做了个小案例查询全部的数据&…

JS 获取浏览器、显示器 窗体等宽度和高度

转载自 JS 获取浏览器、显示器 窗体等宽度和高度 网页可见区域宽&#xff1a;document.body.clientWidth 网页可见区域高&#xff1a;document.body.clientHeight 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽) 网页可见区域高&#xff1a;documen…

斐波那契查找+思路分析

图解 代码实现 package com.atguigu.search;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ public class FibonacciSearch {public static int maxSize 20;public static void main(String[] args) {int[] arr {1, 8, 10, 89, 1000, 1234};System.o…

OSS.Social微信项目标准库介绍

经过本周的努力&#xff0c;昨晚终于完成OSS.Social微信项目的标准库支持&#xff0c;当前项目你已经可以同时在.net framework和.net core 中进行调用&#xff0c;调用方法也发生了部分变化&#xff0c;这里我简单分享下&#xff0c;主要包含下边几个部分&#xff1a; 移植后…

使用stream进行分页

public class UserService {public List<User> findUserByParamToPage(Integer index,Integer pageSize){UserDao userDao new UserDao();List<User> users userDao.findAll().stream()/*** 过滤address为""的数据*/.filter(user -> !user.getAddres…

ssh(Spring+Spring mvc+hibernate)简单增删改查案例

最近和spring mvc干上了&#xff0c;各种奇葩问题&#xff0c;各种解决。。。现在想想这历程还挺艰辛的&#xff0c;好了&#xff0c;不在这墨迹了&#xff0c;我们进入正题。 据说&#xff0c;现在Springmvc很流行&#xff0c;既然很流行就搞搞它&#xff0c;看看是个什么鬼&…

python把字符串按照指定长度分割_python如何将字符串等长分割

python将字符串等长分割的方法:1、两个一组分割,代码为【b=re.findall(r.{2},aa) 】;2、按照固定长度分割字符串三个字符一组,代码为【re.findall(r.{3}, string)】。 【相关学习推荐:python教程】 python将字符串等长分割的方法: 方法一: 代码示例#!/bin/python #site:W…

js Date 函数方法

转载自 js Date 函数方法 var myDate new Date();myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当…

按小区楼栋单元楼层房间号进行排序-多列字符串提取数字进行排序

多列字符串提取数字进行排序 order by e.community_code, e.estate_id, cast(cour.court_name as UNSIGNED) , cast(b.build_name as UNSIGNED) , cast(u.unit_name as UNSIGNED) ,cast(f.floor_name as UNSIGNED) , cast(a.house_no as UNSIGNED) <select id"ge…

Visual Studio 2017 离线安装方式

Visual Studio&#xff0c; 特别是Visual Studio 2017 通常是一个在线安装程序&#xff0c;如果你在安装过程中失去连接&#xff0c;你可以遇到问题。但是&#xff0c;由于法律原因&#xff0c;微软没有提供完整的可下载的ISO镜像。他们不能将Android安装程序从Google打包到ISO…

小米开发版安装magisk_小米9手机不用解锁安装Magisk工具的教程

也是来把咱们的这个小米9手机的安装Magisk的方法整理一下了&#xff0c;这个Magisk工具也是用到的比较多&#xff0c;今天来说的安装方法是不用刷recovery就可来进行安装了&#xff0c;也是在9.0以上的系统可以用的&#xff0c;不过手机是需要开发版的才行的&#xff0c;如果你…

如何用xshell上宝塔

如何下载xshell7免费版 网盘链接 提取码tmtn 如何连接服务器 第一步 第二步 第三步 第四步 第五步 安装宝塔 直接输入命令 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh得到 打开浏览…