我一直在为这个问题而烦恼,我被要求回答(这是技术上的功课)。 我考虑过一个哈希表,但我有点坚持我如何使这项工作的具体细节
以下是问题:
给定 k 整数组 A 1 , A 2 ,.总大小为O的 k ( n ),你应该确定是否存在 a 1 ε A 1 , a 2 ε A 2 ,.., a k ε A < / em> k ,这样 a 1 + a 2 + .. + a k -1 = a k < / EM> 子>。您的算法应在T k ( n )中运行 时间,其中T k ( n )= O( n k / 2 ×log n )对于偶数 k 和O( n ( k +1)/ 2 )对于 k 的奇数值。
任何人都可以给我一个大方向,以便我能够更接近解决这个问题吗?
答案 0 :(得分:9)
将k组分为两组。对于偶数k,两个组各有k / 2组。对于奇数k,一组具有(k + 1)/ 2而另一组具有(k-1)/ 2组。计算每组中所有可能的总和(从每组中取一个元素)。对于偶数k,您将得到两个数组,每个数组都有n k / 2 元素。对于奇数k,一个阵列具有n (k + 1)/ 2 ,而另一个阵列具有n (k-1)/ 2 元素。问题被简化为标准的“给定两个数组,检查是否可以通过从每个数组中取一个元素来达到指定的总和”。