【发布时间】:2014-01-10 15:50:49
【问题描述】:
我有一个问题,我们有一个正数数组,我们必须通过对数组元素进行零次或多次更改来使其严格递增。
我们被问到使数组严格增加所需的最少更改次数。
示例
如果数组是 1 2 9 10 3 15
如果将 3 更改为 12 到 14 之间的某个数字,则 ans=1。
如果 1 2 2 2 3 4 5
ans=5
因为将 2 更改为 3,然后 2 更改为 4,然后 3 更改为 5,然后 4 更改为 6,然后 5 更改为 7
约束:
数组元素个数
每个元素
注意:
这不是作业,在我的面试中被问到,我无法给出算法。
谁能给我一个算法?
链接到示例测试用例的详细问题 https://www.hackerearth.com/problem/algorithm/find-path/
因为它是最小/最大问题,所以对我来说这听起来像是动态编程,但我需要帮助。
【问题讨论】:
-
作业与否,您仍然应该尝试解决问题。给定的限制使它听起来很像一场编程竞赛。
-
我假设对非负数/正数也有一些限制,否则,对于第二个示例,您可以将 1 更改为 -1 并将 (1st) 2 更改为 0 和 (2nd) 2到 1。
-
不需要动态!
-
您是否必须实际确定所需的更改,或者只是确定需要进行的更改数量?如果是后一种情况,我认为扫描列表一次并注意当前有多少元素不符合标准,并在更改一个元素时进行一些额外的间隔跟踪以注意可能会破坏可能尚未破坏的相邻元素的方式去...
标签: algorithm dynamic-programming