C 关于如何根据给定条件找到标记给定数组中所有元素的最小步骤数,有什么提示吗? 两个整数 n> p>首先考虑如何回答 k>代码>= n>代码>(即对子序列的长度没有任何有效限制)。您的答案应该是,最小步数是数组中不同值的数目 然后考虑这是如何随着 K < /代码>的变化而减少的;重要的是,对于a中存在的每个值n,需要覆盖选择集{i:a[i]==n}的K长度间隔的副本数。“ k < /代码>长度的算法沿 a ,在每个位置停用 [i] 尚未覆盖该值 n>代码>完全正确。
首先考虑如何回答<代码> k>代码>=<代码> n>代码>(即对子序列的长度没有任何有效限制)。您的答案应该是,最小步数是数组中不同值的数目C 关于如何根据给定条件找到标记给定数组中所有元素的最小步骤数,有什么提示吗? 两个整数 n> p>首先考虑如何回答 k>代码>= n>代码>(即对子序列的长度没有任何有效限制)。您的答案应该是,最小步数是数组中不同值的数目 然后考虑这是如何随着 K < /代码>的变化而减少的;重要的是,对于a中存在的每个值n,需要覆盖选择集{i:a[i]==n}的K长度间隔的副本数。“ k < /代码>长度的算法沿 a ,在每个位置停用 [i] 尚未覆盖该值 n>代码>完全正确。,c,algorithm,C,Algorithm,首先考虑如何回答 k>代码>= n>代码>(即对子序列的长度没有任何有效限制)。您的答案应该是,最小步数是数组中不同值的数目 然后考虑这是如何变化的: k>代码>减小;所有重要的是,你需要覆盖多少个副本>代码> >代码>长度间隔,你需要覆盖选择集 {i:a[i]=n}。对于A中存在的每个值n。沿着A行走K长度间隔,在每个位置停下来A[i]的简单算法尚未涵盖的n值完全足够。正如我们看到的,最小步数=n/k或n/k+1,最大步数=(n+k-1)。 我们必须优化步骤的总数,这取决于我们过去所做选择的历
然后考虑这是如何变化的:<代码> k>代码>减小;所有重要的是,你需要覆盖多少个副本>代码> >代码>长度间隔,你需要覆盖选择集<代码> {i:a[i]=n}。对于
A
中存在的每个值n
。沿着A
行走K
长度间隔,在每个位置停下来A[i]的简单算法
尚未涵盖的n
值完全足够。正如我们看到的,最小步数=n/k或n/k+1,最大步数=(n+k-1)。
我们必须优化步骤的总数,这取决于我们过去所做选择的历史记录,即动态解决方案
有关动力学理论教程,请参见,因为我们可以看到最小步数=N/k或N/k+1,最大步数=(N+k-1)。 我们必须优化步骤的总数,这取决于我们过去所做选择的历史记录,即动态解决方案 有关动力学理论教程,请参见可在O(n)中求解,如下所示: 跟踪每个元素a[i]。如果之前没有跟踪a[i],则映射数字及其索引和递增计数器。如果之前跟踪过数字,则检查其(最后一个索引-当前索引)>=K如果是,则更新索引并递增计数。打印计数。 Map STL将是有益的。可以在O(n)中解决,如下所示: 跟踪每个元素a[i]。如果之前没有跟踪a[i],则映射数字及其索引和递增计数器。如果之前跟踪过数字,则检查其(最后一个索引-当前索引)>=K如果是,则更新索引并递增计数。打印计数。
映射STL将是有益的。是的,但请帮助我找到一个快速解决方案。构造样本输入非常容易,因此步骤数将为N-1。为什么希望能够找到一个更快的解决方案?@HighPerformanceMark how N-1?是的,但请帮助我找到一个快速解决方案。构造样本输入非常容易,因此步骤的数量将是N-1。为什么你希望能够找到更快的解决方案?@高性能数据库N-1?抱歉,但是我不能理解你的答案。你能解释一下吗?@ HELDECODER孤立地考虑每一个不同的值<代码> V< /代码>。检查你需要覆盖多少长度的子序列<代码> K <代码>。所有位置
i
和A[i]==v
@danielfisher现在我知道了。:)对不起,我不能理解你的答案。你能再解释一下吗?@ HELDECODER孤立地考虑每一个不同的值<代码> V < /代码>。检查长度K
的多少子序列,您需要用A[i]==v
@danielfisher覆盖所有位置i
,现在我知道了。:)