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

在数组中每个索引的左侧/右侧查找Argmin

在数组中每个索引的左侧/右侧查找Argmin是一个算法问题,用于在给定数组中找到每个索引位置左侧或右侧的最小值的索引。

答案如下:

该问题可以通过遍历数组并使用一个辅助数组来解决。辅助数组用于存储每个索引位置左侧或右侧的最小值的索引。

对于左侧查找Argmin,可以按照以下步骤解决:

  1. 创建一个与原始数组相同大小的辅助数组,初始化为-1,表示没有找到最小值的索引。
  2. 从左到右遍历原始数组,对于每个索引位置i,执行以下操作:
    • 如果辅助数组中i-1位置的值为-1,表示左侧没有找到最小值的索引,将i赋值给辅助数组的i位置。
    • 如果辅助数组中i-1位置的值不为-1,表示左侧已经找到最小值的索引,比较原始数组中i位置的值和原始数组中辅助数组中i-1位置的值,如果原始数组中i位置的值更小,则将i赋值给辅助数组的i位置,否则将辅助数组中i-1位置的值赋值给辅助数组的i位置。
  • 返回辅助数组作为结果,即为每个索引位置左侧的最小值的索引。

对于右侧查找Argmin,可以按照以下步骤解决:

  1. 创建一个与原始数组相同大小的辅助数组,初始化为-1,表示没有找到最小值的索引。
  2. 从右到左遍历原始数组,对于每个索引位置i,执行以下操作:
    • 如果辅助数组中i+1位置的值为-1,表示右侧没有找到最小值的索引,将i赋值给辅助数组的i位置。
    • 如果辅助数组中i+1位置的值不为-1,表示右侧已经找到最小值的索引,比较原始数组中i位置的值和原始数组中辅助数组中i+1位置的值,如果原始数组中i位置的值更小,则将i赋值给辅助数组的i位置,否则将辅助数组中i+1位置的值赋值给辅助数组的i位置。
  • 返回辅助数组作为结果,即为每个索引位置右侧的最小值的索引。

这个问题可以应用于很多场景,例如在图像处理中,可以使用该算法找到每个像素点左侧或右侧的最小灰度值的像素点索引。在机器学习中,可以使用该算法找到每个样本左侧或右侧的最小特征值的索引。

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

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足各种业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:提供高性能、可扩展的关系型数据库服务。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务。详情请参考:https://cloud.tencent.com/product/cos
  • 腾讯云人工智能:提供丰富的人工智能服务和解决方案,包括图像识别、语音识别、自然语言处理等。详情请参考:https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

查找某个元素在数组对应索引

1 问题 已知一个数组内元素为 { 19, 28, 37, 46, 50 } 。用户输入一个数据,查找该数据在数组索引,并在控制台输出找到索引值,如果没有查找到,则输出 -1。...2 方法 首先定义一个数组键盘录入要查找数据,用一个变量接收。再定义一个变量,初始值为-1。遍历数组获取数组每一个元素。...然后将键盘输入数据和数组每一个元素进行比较,如果值相同就把该值对应索引赋值给索引变量,并结束循环。最后输8出索引变量。...; }else{ System.out.println("您输入数字" + a + "在数组索引是:" + dataIndex); } }...if(a == arr[i]){ return i; } } return -1; } } 3 结语 针对查找某个元素再数组对应索引这个问题

3.1K10

JavaScript算法题:查找数字在数组索引

我们必须对数字数组进行升序排序,并找出给定数字数组位置。 算法说明 将值(第二个参数)插入到数组(第一个参数),并返回其排序后数组最低索引。返回值应该是一个数字。...解决方案#1:`.sort()`,. indexOf`()` PEDAC 理解问题:有两个输入:一个数组和一个数字。我们目标是将输入数字输入数组后中排序后,再返回它索引。...示例/测试用例:我们不知道输入数组是以哪种方式排序,但是提供测试用例清楚地表明,输入数组应该从小到大进行排序。 请注意,最后一个测试用例存在边界问题,其中输入数组是一个空数组。...我们目标是将输入数字输入数组后中排序后,再返回它索引。 示例/测试用例:我们不知道输入数组是以哪种方式排序,但是提供测试用例清楚地表明,输入数组应该从小到大进行排序。...这个解决方案需要考虑两个边界情况: 如果输入数组为空,则我们需要返回 0,因为 num 将是该数组唯一元素,所以它在索引为 0 位置。

2K20

二分法查找有序数组对应数据索引

1 问题 在有序(升序或降序)数组查找对应数据索引时,通常采取循环暴力求解:遍历数组全部数据,直到数据等于目标值时,返回目标值索引。但是,当数组数据足够多时,暴力求解会占用大量时间。...那么,该如何减少查找过程中所花费时间呢?...2 方法 可以通过“二分法”减少查找过程中所花费时间,二分法其数学解释为:对于区间[a,b]上连续不断且f(a)*f(b)<0函数y=f(x),通过不断地把函数f(x)零点所区间一分为二,使区间两个端点逐步逼近零点...:35613用时:0.0002653999999893131s''' 3 结语 在有序(升序或降序)数组查找对应数据索引,当数组数据过多时,可以使用“二分法”优化查找所花费时间。...经过测试,使用time()模块统计程序运行时所花费时间后,发现使用“二分法”查找比暴力查找快了3500倍之多,证明该方法是有效

15410

随机化计算机应用:信息(索引查找、信息加密【

引言 哈希表:本质是通过随机化,把一个比较大、稀疏空间,映射到一个比较小、紧密空间中。计算机,它通常是通过数组实现。...对索引进行查询演变: 将关键词变成一个编号,通过数学变换,把每一个中国人名字都可以对应一个数字。将来查找时,只要用公式做一次计算,就能直接找到名字索引位置。...计算机,它通常是通过数组实现。 相比一般数组,它有三个优点: 动态增加或者删除一个数据项比较快。...将来查找时,只要用公式做一次计算,就能直接找到名字索引位置。 假如汉字有3万个,每个汉字就对应了一个从0~29999数字。...类似地,每一个中国人名字都可以对应一个数字。 建立索引时,直接把“张楠”存放到第105,004,003个存储单元,将来查找时,只要用上面的公式做一次计算,就能直接找到“张楠”索引位置。

15230

Leetcode No.33 搜索旋转排序数组(二分法)

请你在数组搜索 target ,如果数组存在这个目标值,则返回它索引,否则返回 -1 。...: 输入:nums = [1], target = 0 输出:-1 提示: 1 <= nums.length <= 5000 -10^4 <= nums[i] <= 10^4 nums 每个值都...我们考虑数组最后一个元素 x:最小值右侧元素(不包括最后一个元素本身),它们值一定都严格小于 x;而在最小值左侧元素,它们值一定都严格大于 x。...小于nums[high]时,说明mid->high右侧是有序,判断target是否右侧,否则往左侧递归查找 4、当nums[mid]大于nums[high]时,说明low->mid左侧是有序,判断...target是否左侧,否则往右侧递归查找 5、当low>high时,表示没有找到,返回-1 三、代码 class Solution { public int search(int[] nums

15920

备战蓝桥杯————二分查找(二)

引言         在上一篇博客,我们深入探讨了二分搜索算法及其寻找数组左侧边界应用。二分搜索作为一种高效查找方法,其核心思想在于通过不断缩小搜索范围来定位目标值。...本文中,我们将继续这一主题,不仅会回顾二分搜索基本原理,还将重点介绍如何利用这一算法来寻找数组目标值右侧边界。通过对比左侧右侧边界搜索,我们将揭示二分搜索算法灵活性和强大功能。...无论您是准备技术面试,还是日常编程寻求效率提升,本文都将为您提供宝贵洞见。 一、寻找右侧边界二分查找         在有序数组寻找特定值右侧边界是二分查找算法一个重要变体。...该方法返回一个包含两个元素数组,第一个元素是目标值最小索引左侧边界),第二个元素是最大索引右侧边界)。如果目标值不存在于数组,则两个元素都为 -1。 以下是该方法思路: 1....返回结果: 返回包含左侧右侧边界索引数组arr。 这种方法确保了即使目标值在数组多次出现情况下,也能正确地找到其首次和最后一次出现索引

8810

python3实现查找数组中最接近与某值元素操作

查询集合中最接近某个数数 /* ★实验任务 给你一个集合,一开始是个空集,有如下两种操作: 向集合插入一个元素。...(map使用可自行百度) 二、当集合为空时,输出“Empty!”;当集合只有一个元素时,直接输出该元素。 三、下面重点看一般情况。...1.先查找集合是否有查询元素,有则输出该元素 2.没有的话,将该元素先插入集合,再查找该元素处于集合某个位置。 若该元素集合首位,则输出该数下一位。...若该元素集合末位,则输出该数上一位。 否则,判断它左右元素值与它绝对值,输出差绝对值较小那个元素。若相等,则同时输出。...实现查找数组中最接近与某值元素操作就是小编分享给大家全部内容了,希望能给大家一个参考。

6.1K20

面试算法:循环排序数组快速查找第k小值d

,假定数组所有元素都不相同,请你给出一个复杂度为O(lgn)算法,查找出第k小元素。...解答这道题关键是要找到数组最小值,由于最小值不一定在开头,如果它在数组中间的话,那么它一定具备这样性质,假设第i个元素是最小值,那么有A[i-1]>A[i] A[n-1],那么我们可以确定最小值m右边,于是m 和 end之间做折半查找。...如果A[m] < A[n-1],那么我们根据前面的不等式判断一下当前元素是否是最小值,如果不是,那么最小值m左边,于是我们begin 和 m 之间折半查找,如此我们可以快速定位最小值点。...这种查找方法使得我们能够lg(n)时间内查找到最小值。 当找到最小值后,我们就很容易查找第k小元素,如果k比最小值之后元素个数小,那么我们可以在从最小值开始数组部分查找第k小元素。

3.2K10

聊一聊二分查找

本文就与小伙伴们一起探讨几个最常用二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。 并对里面的实现细节做一个仔细分析。...寻找一个数(最基本二分查找法) 这个场景是最简单场景,也是大家最熟悉入门算法,即在数组搜索一个指定数字,如果存在返回索引,如果不存在返回-1....那么什么时候算是没有找到这个数字呢,一共有两种情况,一种情况是目标数字大于数组每个数字,这种情况下,left=right=nums.length。...另一种情况是目标数字小于数组每个数字,也就是left=right=0,而且nums[0]!=target。...总结 至此,几个最常用二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界,王子与大家就讨论完毕了。 通过本文,小伙伴们应该对于二分查找细节有了更深一步了解。

51320

(转载非原创)编程思想与算法leetcode_二分算法详解

二分算法通常用于有序序列查找元素: 有序序列是否存在满足某条件元素; 有序序列第一个满足某条件元素位置; 有序序列中最后一个满足某条件元素位置。...但是如果我想得到 target 左侧边界,即索引 1,或者我想得到 target 右侧边界,即索引 3,这样的话此算法是无法处理。 这样需求很常见。...但是如果我想得到 target 左侧边界,即索引 1,或者我想得到 target 右侧边界,即索引 3,这样的话此算法是无法处理。 这样需求很常见。...h,区间 [l, m) 中继续搜索,即不断向左收缩,达到锁定左侧边界目的。...= m ​ 因为我们需找到 target 左侧索引 所以当 nums[m] == target 时不要立即返回 而要收紧右侧边界以锁定左侧边界 第三个,寻找右侧边界二分查找: 因为我们初始化 h

34120

【算法】递归算法 ② ( 使用递归实现二分法 | if else 编码优化 )

: 从一个 有序数组 查找某个 目标值 , 返回 该目标元素在数组索引值 , 如果 数组没有该 目标值 , 则返回 -1 ; 如 : 从 [1 , 2 , 4 , 5 , 6] 查找 目标值...2 , 返回 2 对应数组元素索引 为 1 ; 如果从上述数组查找 3 , 数组没有该元素 , 则返回 -1 ; 使用 递归 实现 二分法 , 目的是 不断 缩小二分区间 , 每次 进行递归操作..., 数组集合 , 查找元素区间范围 , 起始索引 和 终止索引 , 这是 2 个参数 , 进行对比目标值 返回值分析 : 返回值就是 获取 目标值 在数组索引 ; 递归拆解 :...中心元素 = 目标值 , 直接返回该索引值 ; - 如果 中心元素 < 目标值 , 则需要去 该查找区间 右侧继续查找 ; - 如果 中心元素 > 目标值 , 则需要去 该查找区间 左侧继续查找...: 代码 , 使用 else 越多 , 代码 可读性越差 ; 如果要使用 if else 语句 , 推荐将这个逻辑单独封装到一个函数 , 函数内部 使用 if return 来替代 if

51210

leetcode刷题(86)——739.二分查找

nums 每个元素都将在 [-9999, 9999]之间。 二分查找真正坑根本就不是那个细节问题,而是在于到底要给 mid 加一还是减一,while 里到底用 <= 还是 <。...这二者可能出现在不同功能二分查找,区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),因为索引大小为 nums.length 是越界。...但是如果我想得到 target 左侧边界,即索引 1,或者我想得到 target 右侧边界,即索引 3,这样的话此算法是无法处理。...寻找右侧边界二分查找 类似寻找左侧边界算法,这里也会提供两种写法,还是先写常见左闭右开写法,只有两处和搜索左侧边界不同,已标注: int right_bound(int[] nums, int...所以当 nums[mid] == target 时不要立即返回 而要收紧右侧边界以锁定左侧边界 第三个,寻找右侧边界二分查找: 因为我们初始化 right = nums.length 所以决定了我们

18520

面试算法,绝对值排序数组快速查找满足条件元素配对

对于这个题目,我们曾经讨论过当数组元素全是整数时情况,要找到满足条件配对(i,j),我们让i从0开始,然后计算m = k - A[i],接着(i+1, n)这部分元素,使用折半查找,看看有没有元素正好等于...m,如果在(i+1,n)存在下标j,满足A[j] == m 那么我们就可以直接返回配对(i,j),这种做法在数组元素全是正数,全是负数,以及是绝对值排序时都成立,只是绝对值排序数组,进行二分查找时...因此查找满足条件元素配对时,我们先看看前两种情况是否能查找到满足条件元素,如果不行,那么我们再依据第三种情况去查找,无论是否存在满足条件元素配对,我们算法时间复杂度都是O(n)。..." and " + this.sortedArray[this.indexJ]); } } } 类FindPairInAbsoluteSortedArray用于绝对值排序数组查找满足条件元素配对...,它先根据两元素都是正数情况下查找,然后再根据两元素都是负数情况下查找,如果这两种情况都找不到,再尝试两元素一正一负情况下查找,如果三种情况都找不到满足条件元素,那么这样元素在数组不存在。

4.3K10

这些评论有点意思。

首先给没有见过这道题目的小伙伴补充一下前置知识,这道题目讲的是: 一个长度为 n - 1 递增排序数组所有数字都是唯一,并且每个数字都在范围 0 ~ n - 1 之内。...范围 0 ~ n - 1 内 n 个数字中有且只有一个数字不在该数组,请找出这个数字。 比如数组为 [0,1,2,3,4,5,6,7,9],注意到 8 不在里面,因此输出 8 。...很明显,遍历方式没有用到题目给出所有条件: 所有数字都是唯一 每个数字都在范围 0 ~ n - 1 之内 有且只有一个数字不在该数组 这里给大家一个小技巧,但凡看到数组、搜索相关词语,第一想法可以去尝试二分法...而如果发现有数字没有出现在正确位置上,也就是发生了错位,比如数字 9 出现在索引位置为 8 地方,那么由于有且只有一个数字不在该数组,那么很明显数字 10 出现在索引位置为 9 地方、数字 11...// 当前区间左侧为 left,右侧 right = mid - 1 right = mid - 1; } }

17350

刷到 LeetCode 这个评论,我沉默了!

首先给没有见过这道题目的小伙伴补充一下前置知识,这道题目讲的是: 一个长度为 n - 1 递增排序数组所有数字都是唯一,并且每个数字都在范围 0 ~ n - 1 之内。...范围 0 ~ n - 1 内 n 个数字中有且只有一个数字不在该数组,请找出这个数字。 比如数组为 [0,1,2,3,4,5,6,7,9],注意到 8 不在里面,因此输出 8 。...很明显,遍历方式没有用到题目给出所有条件: 所有数字都是唯一 每个数字都在范围 0 ~ n - 1 之内 有且只有一个数字不在该数组 这里给大家一个小技巧,但凡看到数组、搜索相关词语,第一想法可以去尝试二分法...而如果发现有数字没有出现在正确位置上,也就是发生了错位,比如数字 9 出现在索引位置为 8 地方,那么由于有且只有一个数字不在该数组,那么很明显数字 10 出现在索引位置为 9 地方、数字 11...// 当前区间左侧为 left,右侧 right = mid - 1 right = mid - 1; } }

41940

二分查找算法详解

阿东正准备把每一本书报警器下过一下,以找出引发警报书,但是保安露出不屑眼神:你连二分查找都不会吗?...这二者可能出现在不同功能二分查找,区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),因为索引大小为 nums.length 是越界。...比如说给你有序数组 nums = [1,2,2,2,3],target = 2,此算法返回索引是 2,没错。...但是如果我想得到 target 左侧边界,即索引 1,或者我想得到 target 右侧边界,即索引 3,这样的话此算法是无法处理。 这样需求很常见。...如果 nums 不存在 target 这个值,怎么办? 答:因为要一步一步来,先理解一下这个「左侧边界」有什么特殊含义: ? 对于这个数组,算法会返回 1。

1K41

二分查找算法细节详解

本文以问答形式,探究几个最常用二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。第一个场景是最简单算法形式,解决 这道题,后两个场景就是本题。...这二者可能出现在不同功能二分查找,区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),因为索引大小为 nums.length 是越界。...但是如果我想得到 target 左侧边界,即索引 1 2,或者我想得到 target 右侧边界,即索引 3 3,这样的话此算法是无法处理。 这样需求很常见。...如果 nums 不存在 target 这个值,怎么办? 答:因为要一步一步来,先理解一下这个「左侧边界」有什么特殊含义: ? 对于这个数组,算法会返回 1。...而是缩小「搜索区间」上界 right,区间 [left, mid)中继续搜索,即不断向左收缩,达到锁定左侧边界目的。

82620

二分法注意点_二分法怎么用

不要气馁,因为二分查找其实并不简单。思路很简单,细节是魔鬼。 本文以问答形式,探究几个最常用二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。...这二者可能出现在不同功能二分查找,区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),因为索引大小为 nums.length 是越界。...但是如果我想得到 target 左侧边界,即索引 1,或者我想得到 target 右侧边界,即索引 3,这样的话此算法是无法处理。 这样需求很常见。...如果 nums 不存在 target 这个值,怎么办? 答:因为要一步一步来,先理解一下这个「左侧边界」有什么特殊含义: 对于这个数组,算法会返回 1。...6 因为我们需找到 target 右侧索引 7 所以当 nums[mid] == target 时不要立即返回 8 而要收紧左侧边界以锁定右侧边界 9 10 又因为收紧左侧边界时必须 left =

31430

极速查找(1)-算法分析

一种是动态查找表,查找过程同时插入查找不存在数据元素,或者从 查找删除已经存在某个数据元素。 主要操作有,查找时插入数据元素,查找十删除数据元素。...// 遍历数组每个元素 for (int i = 0; i < arr.length; i++) { // 如果找到目标元素,返回其索引..." + result + "处"); } } } 运行代码,输出结果为:“目标元素索引4处”,表示目标元素7在数组索引4 处。...SequentialSearch { public static int search(int[] arr, int target) { int n = arr.length; // 遍历数组每个元素...步骤 1、确定查找范围起始点和终点,通常为数组首尾两个索引。 2、计算查找范围中间点,取中间元素索引

17320
领券