0
点赞
收藏
分享

微信扫一扫

[leetcode] 1497. Check If Array Pairs Are Divisible by k


Description

Given an array of integers arr of even length n and an integer k.

We want to divide the array into exactly n / 2 pairs such that the sum of each pair is divisible by k.

Return True If you can find a way to do that or False otherwise.

Example 1:

Input: arr = [1,2,3,4,5,10,6,7,8,9], k = 5
Output: true
Explanation: Pairs are (1,9),(2,8),(3,7),(4,6) and (5,10).

Example 2:

Input: arr = [1,2,3,4,5,6], k = 7
Output: true
Explanation: Pairs are (1,6),(2,5) and(3,4).

Example 3:

Input: arr = [1,2,3,4,5,6], k = 10
Output: false
Explanation: You can try all possible pairs to see that there is no way to divide arr into 3 pairs each with sum divisible by 10.

Example 4:

Input: arr = [-10,10], k = 2
Output: true

Example 5:

Input: arr = [-1,1,-2,2,-3,3,-4,4], k = 3
Output: true

Constraints:

  • arr.length == n
  • 1 <= n <= 10^5
  • n is even.
  • -10^9 <= arr[i] <= 10^9
  • 1 <= k <= 10^5

分析

题目的意思是:给你一个数组,要求把数两两组合能否全部被K整除。一开始没什么思路,看了提示以后,发现可以构造一个长度为k的数组fre,遍历arr,统计arr里面每一个值和k取余的值的频率。然后再遍历fre,对于第0个位置,频率应该是偶数,其他位置用双指针法来判断两边的频率是否相等,如果全相等则返回True,否则返回False。如果能想到构造取余的频率数组,就能够做出来。

代码

class Solution:
def canArrange(self, arr: List[int], k: int) -> bool:
n=len(arr)
fre=[0]*k
for num in arr:
t=num%k
fre[t]+=1
i=1
j=k-1
if(fre[0]%2!=0):
return False
while(i<=j):
if(fre[i]!=fre[j]):
return False
else:
i+=1
j-=1
return True


举报

相关推荐

0 条评论