首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我想用binarySearch找到向量的最小和最大索引

首先,binarySearch是一种基于二分查找算法的搜索方法,用于在已排序的向量或数组中查找特定元素的位置。它通过重复地将查找范围划分为两半,直到找到目标元素或确定目标元素不存在。

在应用binarySearch时,我们需要遵循以下步骤:

  1. 确定搜索范围:确定向量的起始索引和结束索引。
  2. 计算中间索引:通过将起始索引和结束索引相加并除以2,得到中间索引。
  3. 比较目标元素和中间元素:将目标元素与中间元素进行比较。 a. 如果目标元素等于中间元素,则返回中间索引。 b. 如果目标元素小于中间元素,则在前半部分重复步骤2和步骤3。 c. 如果目标元素大于中间元素,则在后半部分重复步骤2和步骤3。
  4. 重复执行步骤2到步骤3,直到找到目标元素或确定目标元素不存在。

通过binarySearch,我们可以找到向量中特定元素的最小和最大索引。具体步骤如下:

  1. 使用binarySearch找到目标元素的最小索引: a. 进行标准的binarySearch,查找目标元素在向量中的位置。 b. 如果找到目标元素,则将当前索引保存为最小索引。 c. 在找到目标元素的情况下,将结束索引更新为当前索引-1,然后重复步骤a到步骤c,继续查找目标元素的最小索引。 d. 如果未找到目标元素,则返回-1表示目标元素不存在。
  2. 使用binarySearch找到目标元素的最大索引: a. 进行标准的binarySearch,查找目标元素在向量中的位置。 b. 如果找到目标元素,则将当前索引保存为最大索引。 c. 在找到目标元素的情况下,将起始索引更新为当前索引+1,然后重复步骤a到步骤c,继续查找目标元素的最大索引。 d. 如果未找到目标元素,则返回-1表示目标元素不存在。

这样,我们就可以使用binarySearch找到向量的最小和最大索引。

推荐的腾讯云相关产品和产品介绍链接地址:

  1. 腾讯云对象存储(COS):腾讯云对象存储是一种高可用、高扩展、低成本的云存储服务,适用于存储和处理大规模非结构化数据。它提供了数据备份、归档、图片视频处理等功能。详细信息请参阅:https://cloud.tencent.com/product/cos
  2. 腾讯云CDN加速:腾讯云CDN加速是一种全球覆盖、安全稳定的内容分发网络服务,可提供高速、低延迟的内容传输。它适用于网站加速、静态资源加速、点播加速等场景。详细信息请参阅:https://cloud.tencent.com/product/cdn

注意:根据要求,我们没有提及其他云计算品牌商,因此无法提供与其他品牌商相关的链接和产品推荐。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【JavaSE专栏47】Java常用类Collections解析,你了解JAVA集合类通用用法吗?

随机排序方法:shuffle() 用于随机打乱 List 集合中元素顺序。 最大最小值方法:max() min() 用于获取集合中最大最小值。...2.5 max min 最大最小值方法 max() min()。...查找最大最小值:Collections 类提供了 max() min() 方法,可以快速找到集合中最大最小值。...binarySearch(List>list,Tkey):在指定列表中进行二分查找,找到返回索引,找不到返回负数。...binarySearch 方法用于在已排序 List 中进行二分查找,它使用方式是传入指定List要查找值,如果找到则返回索引,如果找不到则返回负数,要使用 binarySearch 方法,List

23730
  • 用斗地主实例学会使用java Collections工具类

    一、背景 最近在学习数据结构算法过程中频繁用到了Collections工具类,这是开发中一把利器,简化了许多涉及集合编码,该文将通过实例对此工具类进入深入剖析。...this.cards.size() + "张牌:" + poker; } 3.5、主程序 生成一整副牌; 设置3个玩家,其中两个为农民,一个为地主; 3人轮流抓牌,地主多拿三张牌; 玩家理牌看牌(找到最大最小牌...player3.draw(poker.getCards().get(i)); i++; } // 展示三个玩家洗牌后手上牌面及最大最小牌...extends T> i = coll.iterator(); T candidate = i.next(); // 通过迭代器循环比较,找到最小 while (i.hasNext...extends T> i = coll.iterator(); T candidate = i.next(); // 通过迭代器循环比较,找到最大 while (i.hasNext

    65710

    jdk源码分析之Collections--二分查找优化

    其核心点是三个下标的移动,首先找到列表头部下标,尾部下标以及中间下标,每次拿中间下标元素值与key相比如果相等直接返回,如果小于中间元素则midhign整体向low移动,如果大于中间元素midlow...整体向hign移动,直到找到元素返回下标或者没有找到返回最近元素下标加1。...,既然是使用迭代器访问,那就注定了不能使用类似RandomAccess支持随机访问方式,此方法原理是,使用迭代器遍历元素,从元素上获取索引值,然后索引值与入参索引位置比较,如果找到就返回元素,否则返回...这次执行四次才结束调用,到这里我们思考一下,既然列表已经是排好序,那么在查询一个元素时候,如果目标元素比列表中最小值小或者比最大值大,是不是可以直接宣告不存在,而不是再去列表中使用二分方式再查询一遍...(key) < 0) {//或大于最大值 return -(high + 1); } 浅显易懂,假如目标元素key比list中最小元素还小直接返回-1,没必要走二分逻辑;假如目标元素

    39830

    笔试编程 | 二分查找、数组、排序

    } 常见数组相关编程题 1.对正整数进行分解质因数 // 如传入100, 打印出2*2*5*5 /** 思路: * 首先找到一个最小质数i * 1...., 找到最大最小数字 // 如,int[] list = {-2, 1, 99, 10, 4, 2, -1, 8, 3, 2, 13, 0};输出max: 99 ; min: -2 /**思路:...初始化最大数字max最小数字min为数组中第一个元素 * 2. 将max和数组中"下一个"元素next比较, 如果next>max, 则max=next * 3....首先从未排序序列中找到最小元素, 放到排序序列起始位置 * 2....然后从剩余未排序序列中继续查找最小元素, 放置到已排序序列末尾 * * 双层for循环: 遍历次数为数组长度-1, 外层for循环遍历索引从0到arr.length-2; 内层for循环遍历索引

    67610

    JDK源码解析之Java.util.Collections

    > list,int i,int j) ​ 在指定列表指定位置处交换元素。 ​ 参数:list-进行元素交换列表,i-要交换一个元素索引,j-要交换另一个元素索引。...执行此操作后,目标列表中每个已复制元素索引将等同于源列表中该元素索引,目标列表长度至少必须等于源列表。 ​ 参数:dest-目标列表,src-源列表。...参数:coll-将确定其最小元素collection,comp-用来确定最小元素比较器。...extends T> coll) ​ 根据元素自然顺序,返回给定collection最大元素。 ​ 参数:coll-将确定其最大元素collection。 ​...参数:coll-将确定其最大元素collection,comp-用来确定最大元素比较器 7.6、轮换方法rotate() ​ 函数定义:public static void rotate(List<

    25910

    Java面试必备知识点梳理:二分查找算法

    ,直到查找到关键字为止,否则在序列中没有待查关键字。...二分查找算法Java实现如下,代码定义了方法binarySearch()用于二分查找,在该方法中有3个变量low、midhigh,分别表示二分查找最小、中间最大数据索引。...1 publicstatic int binarySearch(int []array,inta){ 2 intlow=0; 3 inthigh=array.length...,在该数据大于中间位置数据时向右查找,即最大索引位置不变,将最小索引设置为上次循环中间索引加1;在该数据小于中间位置数据时向左查找,即最小索引位置不变,然后将最大索引设置为上次循环中间索引并减1...重复以上过程,直到中间索引位置数据等于要查找数据,说明找到了要查找数据,将该数据对应索引返回。如果遍历到low>high还没有找到要查找数据,则说明该数据在列表中不存在,返回-1。 ?

    59330

    玩转 Go Slices 切片泛型库

    相关函数有:Grow 索引查找:查找指定元素在切片中索引位置。相关函数有:Index IndexFunc 插入:往切片里插入一组值。...相关函数有:Max MaxFunc 最小值:查找切片里最小元素。相关函数有:Min MinFunc 替换:替换切片里元素。相关函数有:Replace 反转:反转切片元素。...相关函数有:Sort SortFunc 以及 SortStableFunc 搜索:BinarySearch BinarySearchFunc BinarySearch BinarySearch...该函数有两个返回值,第一个是指定元素下标索引,第二个是一个 bool 值,表示是否在切片中找到指定元素。...:", maxUser) } 程序运行结果如下所示: 最大元素: {Gopher 24} 最小值:Min MinFunc Min Min 函数返回切片中最小元素,如果切片为空,则 panic。

    1K11

    手撕常见JS面试题

    则保留最小索引 minIndex = j; // 找到最小索引位置 } } // 将当前值比较出最小值交换位置 if (i !...索引- b索引);求a b答案:// 思路:其实也就是找出数组中当前每一项与自身索引相加后最大值以及与索引相加后最小 找出符合条件两项即可 如 let result = (maxItem-minItem...最小项1 最大项6// 很显然这个数组中最大值6与索引相加(6+5)是当中最大值11 1与索引相加(1+0)为当中最小值1(6 + 5)-(1+0)= 10// 假设法let arr = [2, 10..., 9, 1, 8, 3, 4];let minItem = arr[0]; // 假设第一项与自身索引最小索引为0因此省略let maxItem = arr[0]; // 假设第一项与自身索引最大值...(maxItem = cur, max = arr[i], maxIndex = i) : null;}console.log(maxItem, minItem); // 最大项与索引 最小项与索引

    51620

    手撕常见JS面试题1

    则保留最小索引 minIndex = j; // 找到最小索引位置 } } // 将当前值比较出最小值交换位置 if (i !...索引- b索引);求a b答案:// 思路:其实也就是找出数组中当前每一项与自身索引相加后最大值以及与索引相加后最小 找出符合条件两项即可 如 let result = (maxItem-minItem...最小项1 最大项6// 很显然这个数组中最大值6与索引相加(6+5)是当中最大值11 1与索引相加(1+0)为当中最小值1(6 + 5)-(1+0)= 10// 假设法let arr = [2, 10..., 9, 1, 8, 3, 4];let minItem = arr[0]; // 假设第一项与自身索引最小索引为0因此省略let maxItem = arr[0]; // 假设第一项与自身索引最大值...(maxItem = cur, max = arr[i], maxIndex = i) : null;}console.log(maxItem, minItem); // 最大项与索引 最小项与索引

    61830

    Java:冒泡排序 | 二分查找

    true:将12864调换位置 8, 32, 2, 64, 128*; 经过以上步骤,最大数128浮出水面。 现在找出剩余数字 8, 32, 2, 64 中最大数: 8>32?...,已经得出了本次循环最大值,把它放在索引最大处,接下来比较除最大索引处之外最大值,依次循环... 18 } 19 return intArr; 20 }...取中间索引 2 处值 32 , 32<2 ? false,说明数值2索引索引2前面; 取索引0索引2中间索引值1,索引1处值为8, 8<2 ?...依次取值比较即可得到数值2索引为1; 程序实现如下: 参数表示在数组intArr中查找值value所在索引 public static int binarySearch(int value, int...[] intArr) { 2 int low = 0; // low表示最小索引 3 int high = intArr.length - 1; // len表示最大索引

    52320

    JavaScript刷LeetCode心得

    可能性问题这类题一般是告诉你一组数据,然后求出可能性、最小值或最大值。比如:给定几种面额硬币一个总额,使用最少硬币凑成这个总额。...(使用 DFS 经常报 TLE)查找一般遇到查找问题,如查找某个值一般会用到一下方法:排序算法(排序便于查找)二分查找索引移动查找(这个方法名自己想,大概就这个意思~)查找横向纵向都递增二维矩阵中某个值...找到数组中最左边最右边某个数字所在位置var searchRange = function (nums, target) { let targetIndex = binarySearch(nums...hi) } else { return mid }}参考视频:传送门这题使用二分法来查找到某个目标数字索引值,然后索引移动法分别向左向右查找字符。...比较常用是使用 DFS 来做。通过递归将走过路径进行标记来不断往前找到目标路径。

    56920

    JavaScript刷LeetCode心得

    可能性问题这类题一般是告诉你一组数据,然后求出可能性、最小值或最大值。比如:给定几种面额硬币一个总额,使用最少硬币凑成这个总额。...(使用 DFS 经常报 TLE)查找一般遇到查找问题,如查找某个值一般会用到一下方法:排序算法(排序便于查找)二分查找索引移动查找(这个方法名自己想,大概就这个意思~)查找横向纵向都递增二维矩阵中某个值...找到数组中最左边最右边某个数字所在位置var searchRange = function (nums, target) { let targetIndex = binarySearch(nums...hi) } else { return mid }}这题使用二分法来查找到某个目标数字索引值,然后索引移动法分别向左向右查找字符。...比较常用是使用 DFS 来做。通过递归将走过路径进行标记来不断往前找到目标路径。

    40620

    JavaScript刷LeetCode心得总结

    可能性问题这类题一般是告诉你一组数据,然后求出可能性、最小值或最大值。比如:给定几种面额硬币一个总额,使用最少硬币凑成这个总额。...(使用 DFS 经常报 TLE)查找一般遇到查找问题,如查找某个值一般会用到一下方法:排序算法(排序便于查找)二分查找索引移动查找(这个方法名自己想,大概就这个意思~)查找横向纵向都递增二维矩阵中某个值...找到数组中最左边最右边某个数字所在位置var searchRange = function (nums, target) { let targetIndex = binarySearch(nums...hi) } else { return mid }}参考视频:传送门这题使用二分法来查找到某个目标数字索引值,然后索引移动法分别向左向右查找字符。...比较常用是使用 DFS 来做。通过递归将走过路径进行标记来不断往前找到目标路径。

    46640
    领券