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

如何从有序数组中找到为指定两个元素下标

如何从有序数组中找到为指定两个元素下标?...例如:{2, 7, 17, 26, 27, 31, 41, 42, 55, 80} target=72.求得为1755,对应下标为:2,8 思考下,只要将元素自己与后面的所有元素相加计算一下,就能找到对应两个...换个思路,在这个有序数组中,可以使用2个指针分别代表数组两侧两个目标元素.从目标数组两侧,向中间移动;当两个指针指向元素计算,比预定target小了,那左侧指针右移下,重新计算;当计算大于target...时,右侧指针左移下,直到两个元素与target相等.这种方法叫做搜索空间缩减,这也是这道题关注点.这种方法时间复杂度只有O(2*n)(非严谨说法),是非常高效一种方法了....一起看下指针如何移动, 1. 2+80>72,j左移; 2. 2+55<72,i右移 3. 7+55<72,i右移 4. 17+55=72,计算结束 可见,两个指针只移动了3次,就计算出结果

2.3K20

大厂算法面试:使用移动窗口查找两个不重叠且元素等于给定数组

我们看看这次题目: 给定一个所有元素都是正整数数组,同时给定一个target,要求从数组中找到两个不重叠数组,使得各自数组元素等于给定数值target,并且要求两个数组元素个数之和最小,例如给定数组为...现在我们看看问题处理。解决这个问题有三个要点,1,找到所有满足条件数组,2,从这些数组中找到不重叠数组组合,3,从步骤2中找到元素数量之和最小两个数组。首先我们看第1点如何完成。...使用滑动窗口我们能方便找到元素等于给定数组。注意到数组只包含正整数,因此如果保持start不变,end向右边移动,那么窗口内部元素就会变大,如果保持end不变,那么窗口内元素就会减小。...如此类推,我们从数组最左端出发,如果窗口内元素小于给定指定,那么就向右移动end,如果大于给定,那么就像左移动一个单位,当窗口挪出数组,也就是end大于数组最后一个元素下标时,查找结束,当前能找到所有满足元素等于特定所有子数组...首先它为0,如果sub_array[subarray_index]对应数组不跟当前窗口重叠,也就是给定数组末尾元素其下标小于start,那么我们就能增加subarray_index以遍历下一个元素

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

python面试题-找到两个数组元素小于等于目标值target最大所有组合

题目: 给定2个数组(不是有序),再给定一个目标值target,找到两个数组元素小于等于目标值target最大所有组合 示例一: 数组a 为[3, 8,5] 数组b 为[2, 1,4] 目标值...10 输出:(8,2)  因为 8+2<=10 示例二 数组a为 [5, 7, 2] 数组b为[4, 2, 1] 目标值10 输出为(5, 4), (7,2)因为5+4=7+2<=10 代码参考 """...else: if i+j == sum(target_map[-1]): # 如果新元素相加跟收集结果里面值相等...target_map.append((i, j)) if i + j > sum(target_map[-1]): # 如果新元素相加大于收集结果里面值相等...target_map.append((i, j)) if i + j < sum(target_map[-1]): # 如果新元素相加小于收集结果里面值相等

1.3K10

2023-04-05:做甜点需要购买配料,目前共有n种基料m种配料可供选购。 制作甜点需要遵循以下几条规则: 必须选择1种基料;可以添加0种、1种多种配料,

制作甜点需要遵循以下几条规则: 必须选择1种基料;可以添加0种、1种多种配料,每种类型配料最多添加2份, 给定长度为n数组base, basei表示第i种基料价格, 给定长度为m数组topping...3.接着遍历主料价格数组,对于每个价格,从有序表中找到其中最接近小于等于 target - num 价格 floor 接近且大于等于 target - num 价格 ceiling,然后计算出与主料价格相加最接近目标价格...对于主料价格,需要在有序表中查找最接近小于等于 target - num 价格接近且大于等于 target - num 价格。...2.然后使用递归方式枚举所有辅料组合方式,并将每种组合方式所能产生价格存入 COLLECT 数组中,更新 SIZE 。 3.接着将 COLLECT 数组中存储所有价格以非降序排列。...4.对于每个主料价格,从 COLLECT 数组中找到其中最接近小于等于 target - num 价格 floor 接近且大于等于 target - num 价格 ceiling,然后计算出与主料价格相加最接近目标价格

37100

2023-04-05:做甜点需要购买配料,目前共有n种基料m种配料可供选购。制作甜点需要遵循以下几条规则:必须选择1种基料;可

制作甜点需要遵循以下几条规则: 必须选择1种基料;可以添加0种、1种多种配料,每种类型配料最多添加2份, 给定长度为n数组base, base[i]表示第i种基料价格, 给定长度为m数组topping...3.接着遍历主料价格数组,对于每个价格,从有序表中找到其中最接近小于等于 target - num 价格 floor 接近且大于等于 target - num 价格 ceiling,然后计算出与主料价格相加最接近目标价格...对于主料价格,需要在有序表中查找最接近小于等于 target - num 价格接近且大于等于 target - num 价格。...2.然后使用递归方式枚举所有辅料组合方式,并将每种组合方式所能产生价格存入 COLLECT 数组中,更新 SIZE 。 3.接着将 COLLECT 数组中存储所有价格以非降序排列。...4.对于每个主料价格,从 COLLECT 数组中找到其中最接近小于等于 target - num 价格 floor 接近且大于等于 target - num 价格 ceiling,然后计算出与主料价格相加最接近目标价格

19220

文心一言 VS 讯飞星火 VS chatgpt (250)-- 算法导论18.2 3题

三、请说明如何在一棵 B 树中找出最小关键字,以及如何找出某一给定关键字前驱。如果要写代码,请用go语言。 B树(也称为B-tree)中,最小关键字总是位于最左边叶子节点最左边元素。...要找到给定关键字前驱(即小于给定关键字且最接近给定关键字元素),你需要首先定位到包含给定关键字叶子节点该节点之前节点。如果给定关键字不存在于树中,你需要找到最接近小于给定关键字叶子节点。...这通常涉及从根节点开始,沿着树向下搜索,每次比较时选择小于等于给定关键字子树。...最小关键字一定位于某个叶子节点上,且是该叶子节点第一个键值。 要找出给定关键字前驱(前一个元素),我们需要遍历B树,找到包含该关键字节点,查找该节点中最后一个键值小于给定关键字元素。...findKey 函数是一个辅助函数,用于树中查找键值返回节点、键值索引是否找到。search 函数用于在数组中查找键值索引,findMax 函数用于找到子树中最大

10620

算法奥秘:常见六种算法(算法导论笔记2)

冒泡排序:通过不断比较相邻元素交换顺序,使得较大元素逐渐“浮”到数组末尾,如同气泡一样。 选择排序:每次从未排序元素中选择最小(最大)元素,放到已排序末尾。...partition方法中,我们选择数组最后一个元素作为基准,然后将小于等于基准元素移到左边,大于基准元素移到右边。最后,我们返回基准元素索引,以便在quickSort方法中进一步分割子数组。...示例用法中,我们创建了一个包含五个整数数组使用二分查找算法查找目标元素5位置。如果目标元素存在,则输出其位置;否则输出“目标元素不存在”。...Prim算法:用于求解最小生成树问题,一个无向加权图中找到一棵包含所有节点且权最小树。 Kruskal算法:用于求解最小生成树问题,通过不断添加边来构建最小生成树,直至所有节点都被覆盖。...背包问题:给定一组物品,每种物品都有自己重量价值,背包总容量有限。求解如何选择物品放入背包使得背包内总价值最大。 最大子段问题:给定一个整数数组,求解连续数组使得其最大。

19610

文心一言 VS 讯飞星火 VS chatgpt (101)-- 算法导论9.3 7题

七、用go语言,设计一个 O(n)时间算法,对于一个给定包含n个互异元素集合 S 一个正整数k≤n,该算法能够确定 S 中最接近中位数k个元素。...排序之后,我们可以直接找到最接近中位数 k 个元素。注意,如果 k 较大,该算法可能会返回超过 n 个元素。因此,我们需要确保 k 不超过 n。...3.QuickSelect是一种未排序列表中找到第k小(第k大)元素高效算法。...5.最后,我们需要从排序后数组中取出前k个元素后k个元素,这两个子数组就是最接近中位数k个元素。...具体规则如下: • 若当前元素小于等于中位数,则将其插入到最大堆中,确保最大堆中元素个数不超过n/2。 • 若当前元素大于中位数,则将其插入到最小堆中,确保最小堆中元素个数不超过n/2。 5.

15840

【滑动窗口专题】更贴合笔试面试滑动窗口综合题

我们希望使用一个「有序集合」去维护长度为 k 滑动窗口内数,该数据结构最好支持高效「查询」与「插入/删除」操作: 查询:能够「有序集合」中应用「二分查找」,快速找到「小于等于 最大「...大于等于 u 最小」(即「有序集合」中接近 u 数)。...插入/删除:往「有序集合」添加删除元素时,能够低于线性复杂度内完成(维持有序特性)。...例如 AVL,能够让我们最坏为 复杂度内取得到最接近 u 是多少,但本题除了「查询」以外,还涉及频繁「插入/删除」操作(随着我们遍历 nums 元素,滑动窗口不断右移,我们需要不断往...u 最大小于等于 u 接近 u 数) Long l = ts.floor(u); // 从 ts 中找到大于等于 u 最小(大于等于

90810

【力扣算法01】之最接近三数之和

类中定义了一个名为threeSumClosest方法,该方法有两个参数:numstarget,分别表示给定整数数组目标值。...使用一个循环遍历数组nums,循环变量i取值范围为从0到数组长度减2。 循环中,使用两个指针leftright分别指向当前元素后面的第一个最后一个元素。...如果当前与目标值绝对小于接近与目标值绝对: 更新最接近为当前:closest_sum = current_sum。...通过排序数组使用双指针方法,找到一个与目标值最接近三数之和。通过不断更新最接近根据当前与目标值大小关系移动指针,逐步逼近目标值。经过遍历后得到接近将作为结果返回。...如果当前与目标值绝对小于closest_sum与目标值绝对,将最接近closest_sum更新为current_sum。 如果当前小于目标值,将左指针left右移。

7210

每个程序员都必须知道8种数据结构

您可以按元素索引搜索元素 · 更新:在给定索引处更新现有元素 数组应用 · 用作构建其他数据结构基础,例如数组列表,堆,哈希表,向量矩阵。...链表操作 · 搜索:通过简单线性搜索在给定链表中找到键为k第一个元素返回指向该元素指针 · 插入:链接列表中插入一个密钥。...7.堆 堆是二叉树一种特殊情况,其中将父节点与其子节点进行比较,对其进行相应排列。 让我们看看如何表示堆。堆可以使用树和数组表示。图78显示了我们如何使用二叉树和数组来表示二叉堆。 ?...· 最小堆-父项密钥小于等于子项密钥。这称为min-heap属性。根将包含堆最小。 · 最大堆数-父项密钥大于等于子项密钥。这称为max-heap属性。根将包含堆最大。...堆应用 · 用于实现优先级队列,因为可以根据堆属性对优先级进行排序。 · 可以O(log n)时间内使用堆来实现队列功能。 · 用于查找给定数组中k个最小(最大)。 · 用于堆排序算法。

1.4K10

好家伙,你管这破玩意叫“双指针”?

1478 · 最接近target 描述 给出一个数组,在数组中找到两个数,使得它们接近目标值但不超过目标值,返回它们。...那样的话,可以定义两个分别 指向数组第一个元素最后一个元素指针,将两个指针指向元素与目标值 target 进行比较,然后再根据比较结果,决定移动那一个指针 。...注意点 当 数组长度小于 2 时,不存在满足要求结果,直接返回 -1; 由于题目要求找到两个数接近目标值但不超过目标值,因此只需要考虑找到两个数 小于等于目标值 即可,不需要考虑大于情况...定义变量 diff 用于保存当 target 大于等于 sum 时,target - sum ,并不断更新(取最小),diff 初始设置为 INT_MAX。...补充说明 注意点中 第 3 点 中,diff 不断更新取最小(diff = min(differ, target - sum)) 原因是 题目要求在数组找到两个数接近目标值但不超过目标值。

50210

【Leetcode-27.移除元素 -35.搜索插入位置】

Leetcode-27.移除元素 题目:给你一个数组 nums 一个 val,你需要原地移除所有数值等于 val 元素返回移除后数组新长度。...不要使用额外数组空间,你必须仅使用 O(1) 额外空间 原地 修改输入数组元素顺序可以改变。你不需要考虑数组中超出新长度后面的元素。...我们思路还是双指针,定义两个下标fastslow,从0开始遍历,slow记录数组长度,fast找到不为val,就把赋给slow,然后slow长度+1,直到fast>numsSize;...搜索插入位置 题目:给定一个排序数组一个目标值,在数组中找到目标值,返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入位置。...,leftright总会重合,那么nums[mid]总会小于target //所以就会执行left = mid + 1,left就会大于right, //mid+1就是需要插入下标

9710

文心一言 VS 讯飞星火 VS chatgpt (184)-- 算法导论14.1 1题

给定一个红黑树根节点要查找键值,该操作返回一个节点,该节点包含给定键值,或者如果该键值不存在,则返回一个节点,该节点在最接近给定键值搜索路径上。...但我可以尝试帮助您解释一下OS-SELECT过程一般步骤,以及如何在红黑树中使用它。 红黑树中,OS-SELECT操作通常用于中找到第k个最小键值节点。...没有更多信息情况下,我只能告诉你如何在Go语言中一般性地实现操作红黑树。如果你需要这方面的帮助,请告诉我。...红黑树中,每个节点包含键与其相关数据。而 OS-SELECT 操作是用于红黑树中找到第 k 小元素。...OS-SELECT 过程目的是红黑树中查找具有给定结点。在这个例子中,我们要查找为 10 结点。我们从根结点 x 开始,然后根据结点与目标值(10)大小关系,不断向左向右子树移动。

10220

二分法左右边界

二分法左右边界 二分法用起来还是挺好用,就是每次我总是纠结边界条件到底如何确定,用小于号还是小于等于号,满足条件后left是mid还是mid+1,为此专门做了两道简单题,整理了下思路。...题目一 给定一个排序数组一个目标值,在数组中找到目标值,返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入位置。...n 个元素有序(升序)整型数组 nums 一个目标值 target ,写一个函数搜索 nums 中 target,如果目标值存在返回下标,否则返回 -1。...while(left<right)这种写法实际上也确定了每次判断范围是[left,right) 这也意味着当我拿到mid来判断是左边还是右边边界时候,如果mid左边的话一定不能在这个区间内,...所以要进行+1操作,如果是当做右边界则没有任何问题,毕竟这个实际上是不会取到

41200

好家伙,你管这破玩意叫“双指针”?

1478 · 最接近target 描述 给出一个数组,在数组中找到两个数,使得它们接近目标值但不超过目标值,返回它们。 ?...那样的话,可以定义两个分别 指向数组第一个元素最后一个元素指针,将两个指针指向元素与目标值 target 进行比较,然后再根据比较结果,决定移动那一个指针 。...注意点 当 数组长度小于 2 时,不存在满足要求结果,直接返回 -1; 由于题目要求找到两个数接近目标值但不超过目标值,因此只需要考虑找到两个数 小于等于目标值 即可,不需要考虑大于情况...定义变量 diff 用于保存当 target 大于等于 sum 时,target - sum ,并不断更新(取最小),diff 初始设置为 INT_MAX。...补充说明 注意点中 第 3 点 中,diff 不断更新取最小原因是 题目要求在数组找到两个数接近目标值但不超过目标值,diff = min(differ, target - sum)。

29820

800道面试题43道JAVA算法数据结构面试题

给定一个NxN矩阵,矩阵阶数N,请返回旋转后NxN矩阵,保证N小于等于500,图像元素小于等于256。...给定带删除节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true 19、题目: 编写代码,以给定x为基准将链表分割成两部分,所有小于x结点排在大于等于x结点之前 给定一个链表头指针...给定一个int数组A及数组大小n,请返回每个元素所求组成数组。保证A中元素为正整数,且n小于等于1000。...给定根结点指针TreeNode* root结点intp,请返回为p结点后继结点。保证结点大于等于小于等于100000且没有重复,若不存在后继返回-1。...给定两个数int nint m,同时给定int jint i,意义如题所述,请返回操作后数,保证n第j到第i位均为零,且m二进制位数小于等于i-j+1。

1.1K50

哈希表-LeetCode 217、219、220、232(hashset、hashmap)

II 给定一个整数数组一个整数 k,判断数组中是否存在两个不同索引 i j,使得 nums [i] = nums [j],并且 i j 绝对最大为 k。...,nums[i]为key, i为vlaue, 遍历数组查询哈希表,如果存在,即两数相同,则判断索引之间差值是否小于等于K, 如果是返回true,否则更新nums[i]所对应索引,用于下一次比较!...III 给定一个整数数组,判断数组中是否有两个不同索引 i j,使得 nums [i] nums [j] 绝对最大为 t,并且 i j 之间绝对最大为 ķ。...nums[i]nums[j]绝对小于等于t,即 -t <= nums[i]-nums[j] <= t , 再进一步: nums[i] - t <= nums[j] <= nums[i] + t...STL库中,low_bound(type t)表示返回一个大于等于t,如果找不到就返回end() 因此程序中,首先找到low_bound(nums[i]-t),然后判断其是不是小于等于nums[

48920

Java集合之NavigableMap与NavigableSet接口

接口,  提供了针对给定搜索目标返回最接近匹配项导航方法。 ...方法 lower、floor、ceiling higher 分别返回小于小于等于、大于等于、大于给定元素元素,如果不存在这样元素,则返回 null。           ...E  floor(E e)            返回此 set 中小于等于给定元素最大元素;如果不存在这样元素,则返回 null。   ...方法 lowerEntry、floorEntry、ceilingEntry higherEntry 分别返回与小于小于等于、大于等于、大于给定键关联 Map.Entry 对象,如果不存在这样键..."));//   返回小于等于cc最大键:dd         System.out.println(navigatorTreeMap.lastEntry());// 返回一个键-映射关系,它与小于等于给定最大键关联

67010
领券