【发布时间】:2018-09-09 11:47:50
【问题描述】:
我在一次采访中被问到这个问题。
给你一个由 N 个整数组成的数组。您需要确定是否存在给定数组的任何排列,使得所有长度为 K 的子数组的总和相等。 N 可被 K 整除,即 N mod K = 0。
如果数组为 [1,2,1,3,2,3] 且 K = 2,则为 False。
如果数组为 [1,2,1,3,2,3] 且 K = 3,则为 True。
我的逻辑是这样的。
1) 如果 N == K,则返回 True。
2)否则将数组中的每个不同元素存储在字典中。如果字典中不同元素的数量大于 K,则返回 False。
3) 否则将每个不同元素的计数存储在字典中。
4) 如果任何不同元素的计数小于 (N/K),则返回 False。
5) 最后返回 True。
这是我的 Python 代码:
def check(nums, n, k):
if n == k:
return True
else:
my_dict = {}
for i in nums:
if i not in my_dict:
my_dict[i] = 1
else:
my_dict[i] += 1
if len(my_dict) > k:
return False
count = int(n/k)
for i,j in my_dict.items():
if j < count:
return False
return True
我的方法是否正确?有没有更好的方法?
【问题讨论】:
-
您的代码有效吗?它是否为您尝试过的示例提供了正确答案?
-
是的,它适用于示例案例。
-
由于您的代码有效,如果您正在寻找反馈,也许您应该将其发布到codereview.stackexchange.com。
-
` 如果 N == K,返回 True。` 真的吗?对于 K=6 的示例,它是如何工作的?
-
在 N = K 的情况下,每个长度为 K 的子数组即 N 将包含 N 中的所有元素。在这种情况下,它们的总和也将相等,因为每个子数组都包含相同的元素。