【发布时间】:2021-12-20 01:18:42
【问题描述】:
你有一个整数数组。
在一个步骤中,您可以将索引处的值更改为任何整数值。 使数组不递减的最少步数是多少?
例如1:
如果数组是[8,12,11,15],
我们可以将索引 2 处的值从 11 更改为 13。然后数组 变为 [8, 12, 13, 15]
所以,不需要步骤 = 1
例如 2:
如果数组是[9, 2, 5, 18, 20, 25, 19],
我们可以将索引 0 处的值从 9 更改为 2,将索引 6 处的值从 19 更改为 30。然后数组 变为 [2, 2, 5, 18, 20, 25, 30]
所以,不需要步骤 = 2
例如 3:
如果数组是[9,11,5,7],
我们可以将索引 2 处的值从 5 更改为 11,将索引 3 处的值从 7 更改为 11。然后数组 变为 [9, 11, 11, 11]
所以,不需要步骤 = 2
例如 4:
如果数组是[13, 12, 10, 7, 6],
进行更改后,数组变为 [13, 13, 13, 13, 13] 或 [6, 7, 10, 12, 13]。有多种方法可以做到这一点。
所以,不需要步骤 = 4
我尝试的一种方法是找到所有递减子序列并将它们的长度 -1 添加到名为 ans 的变量中。然后返回它。但它在上面提到的 Eg 3 中失败了。
如何解决?
【问题讨论】:
-
您是否尝试过将其建模为图形,然后在其上使用 BFS?对于每个将值放大到之前的值或将值减小到之后的值的操作,您都会有边。
-
你能发布原始问题链接吗?所以我们可以测试我们的解决方案。
-
@Ch3steR 抱歉,我没有链接。我的一个朋友问我,他现在没有回应。试了一会儿,写了代码,有些测试用例自相矛盾,我这里提了。
-
@UlrichEckhardt 不,我没试过。但这真的需要吗?我的意思是,这不能以更简单的方式完成,只涉及数组的遍历吗?
-
不知道是否需要。根据我的经验,使用基于图形的方法来考虑这一点是一个好的开始。也许这样做,您会注意到导致更简单解决方案的模式?无论如何,将其视为图形并不意味着您必须在代码中创建图形。通常,尤其是使用 BFS,您可以从队列中的初始值开始,然后在队列弹出时将新的中间值添加到队列中,因此图只是隐含的。这可能需要额外的思考,例如所以你不会陷入循环,但它可以工作。
标签: arrays algorithm vector data-structures