使用Python检查数组对是否能被k整除的程序
假设我们有一个称为nums的数组,该数组包含偶数个元素,并有另一个值k。我们必须将nums分成正好n / 2个对,使得每对的总和可以被k整除。如果我们可以这样做,则返回true;否则返回false。
因此,如果输入为nums = [9,5,3,4,7,10,20,8] k = 3,则输出将为True,因为我们可以组成(9,3)、(5,7)、(4,20)、(8,10)这些对,所有对的和都可以被3整除。
要解决这个问题,我们将遵循以下步骤 –
- dp:一个新的列表
-
计数:= 0
-
对于nums中的每个x,做
- t:= k-(x mod k)
-
如果t与k相同,则
- 计数:=计数+ 1
- 否则,
- 在dp末尾插入t
- 如果计数除以2不等于0,则
- 返回False
- 对列表dp进行排序
-
低值:= 0
-
高值:= dp的大小-1
-
当低值<高值时,做
- 如果dp[low] + dp[high]与k不同,则
- 返回False
- 低值:=低值+ 1
-
高值:=高值 – 1
- 如果dp[low] + dp[high]与k不同,则
-
返回True
让我们看下面的实现,以便更好地理解 –
示例
def solve(nums, k):
dp=[]
count=0
for x in nums:
t=k-(x % k)
if t == k:
count+=1
else:
dp.append(t)
if count % 2 != 0:
return False
dp.sort()
low = 0
high = len(dp)-1
while low < high:
if dp[low] + dp[high] != k:
return False
low += 1
high -= 1
return True
nums = [9,5,3,4,7,10,20,8]
k = 3
print(solve(nums, k))
输入
[9,5,3,4,7,10,20,8],3
输出
True