两个整数N<=10^5
and K<=N
给出,其中N
是数组的大小A[]
and K
是我们在过程中可以选择的连续子序列的长度。每个元素A[i]<=10^9
。现在假设最初数组的所有元素都未标记。在每一步中,我们将选择任意长度的子序列K
如果这个子序列有未标记的元素,那么我们将标记所有在序列中最小的未标记元素。现在如何计算标记所有元素的最小步骤数?
为了更好地理解问题,请参阅这个例子——
N=5 K=3
A[]=40 30 40 30 40
步骤 1 - 选择区间 [1,3] 并标记 A[1] 和 A[3]
Step2-选择区间[0,2]并标记A[0]和A[2]
步骤 3 - 选择区间 [2,4] 并标记 A[4]
因此这里的最小步骤数是 3。
我的方法(速度不够快,无法通过)-
我从数组的第一个元素开始,并标记所有未标记的元素在距离上等于它<=K
并递增steps
by 1.
首先考虑一下你会如何回答这个问题K
== N
(即对子序列的长度没有任何有效的限制)。您的答案应该是最小步数是数组中不同值的数量。
然后考虑如何改变K
减少;重要的是有多少个副本K
- 覆盖选择集所需的长度间隔{i: A[i] == n}
对于每个值n
存在于A
。简单的步行算法K
-沿长度间隔A
,在每个位置停下来A[i]
尚未涵盖该值n
是完全足够的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)