当前位置: 首页 > 知识库问答 >
问题:

使每三个连续元素中取一个的最小和

楮杰
2023-03-14

给定一个由n个非负整数组成的数组(ARR[]),我们必须找到元素的最小和,以便每3个连续元素中至少有一个被选中。

Input : arr[] = {1, 2, 3}
Output : 1

Input : arr[] = {1, 2, 3, 6, 7, 1}
Output : 4
We pick 3 and 1  (3 + 1 = 4)
Note that there are following subarrays
of three consecutive elements
{1, 2, 3}, {2, 3, 6}, {3, 6, 7} and {6, 7, 1}
We have picked one element from every subarray.

Input : arr[] = {1, 2, 3, 6, 7, 1, 8, 6, 2,
                 7, 7, 1}
Output : 7
The result is obtained as sum of 3 + 1 + 2 + 1
sum[i]= arr[i] + min(sum[i-1],sum[i-2],sum[i-3])
where the base condition is: 
if i==3, then sum(3)= arr[3] + min(sum(0),sum(1),sum(2)) where 
    sum(0)=arr[0]
    sum(1)=arr[1]
    sum(2)=arr[2]
result=min(sum(n-1), sum(n-2), sum(n-3))

请解释所形成的递归方程背后的直觉。为什么添加当前的第i个数组元素和最后三次递归调用的结果的最小值会给出大小为i的数组的正确答案呢?

共有1个答案

贺高杰
2023-03-14

递归公式确实是正确的,但前提是用以下方法扩展它:

output = min(sum(n-1), sum(n-2), sum(n-3))

...其中n是arr的大小。如果n<3,则输出是所有arr值中的最小值。

递归公式满足了“每连续3个元素中至少有一个被拾取”的要求,这与说两个相邻拾取(或数组末尾)之间的索引距离最多为3:

递归公式(包括最终输出的必要公式)也满足了输出“最小元素和”的要求。这是因为最优解必须包含指数n-1、n-2或n-3处的值,否则不满足其他条件。

  • 由于sum(i)在必须包含i时使和最小,因此sum(n-1)、sum(n-2)、sum(n-3)中的最小值将找到最优解。
 类似资料:
  • 我以前见过一些最长的连续序列问题,比如查找递增子序列。我现在正在努力进一步发展我的技能。给定一个整数数组,我想找到一个最长的连续序列,其中各个子序列中所有元素的差值小于一个给定的数字,例如3。一个例子是[10,11,12,15,13],其中只有前三个元素满足条件。此外,我还想返回给定数组中第一个和最后一个元素的索引。 我想做两个函数;get_first_element(arr)和get_last_

  • 我无法解决如何选择元素的问题。 所以,我想总的来说 如果我们选择2个连续的元素Arr[i]和Arr[i+1], 然后我们不能从接下来的3个值Arr[i+2]、Arr[i+3]、Arr[i+4]中选择,我们只能从Arr[i+5]中选择 取第4、5和9位的值 即500+900+100=1500 另一个例子: 即700+900+700+500=2800

  • 本文向大家介绍JavaScript数组中的第一个元素和最后一个元素?,包括了JavaScript数组中的第一个元素和最后一个元素?的使用技巧和注意事项,需要的朋友参考一下 数组是一组元素。每个元素都有其自己的 索引值。我们可以使用这些索引访问任何元素。但是,对于最后一个元素,直到知道数组中存在的元素数量,我们才知道索引。在这种情况下,我们必须使用逻辑。让我们简要地讨论这些细节。 访问第一个元素 因

  • 为了好玩/Java实践,我做了以下问题: 编写一个方法,该方法将整数的优先级队列作为输入,并输出最小整数。该方法不应更改传入的优先级队列的内部状态。您只能使用一个队列或堆栈作为额外数据。不允许使用其他数据结构<代码>k为1索引(表示最小值)。 获取元素很简单:只需删除次,因为它是优先级队列。我想我可以弹出,将元素放在堆栈上进行存储,然后在完成后将它们添加回队列。不过这不起作用,因为元素在优先级队列

  • 给定一个向量和一个有序向量,我想要一个向量,其中 ] 等于 中最小元素的索引,以便

  • 问题内容: 简介: 就我所能搜索到的而言,尚无此问题。 这是一个面试问题。 我什至没有专门寻找代码解决方案,任何算法/伪代码都可以使用。 问题: 给定一个整数数组及其大小,找到2个最小和的 非后续 元素(在数组中不能相邻)。另外,答案中不得包含第一个或最后一个元素(index 和)。解决方案还应该是 时间和空间的复杂性。 例如,当回答是,因为。 当答案为时,因为和不能选择的任何一个,因为处于数组的