Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình kiểm tra xem danh sách có thể được phân vùng thành các cặp trong đó tổng là bội số của k trong python hay không

Giả sử chúng ta có một danh sách các số gọi là num và một giá trị khác k, chúng ta phải kiểm tra xem danh sách có thể được phân chia thành các cặp sao cho tổng của mỗi cặp chia hết cho k hay không.

Vì vậy, nếu đầu vào là nums =[4, 7, 2, 5] k =6, thì đầu ra sẽ là True, vì chúng ta có thể phân vùng danh sách đã cho thành các cặp như (4, 2) và (8, 1) và tổng của chúng chia hết cho 3.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:

  • nếu nums có số phần tử chẵn thì
    • trả về Sai
  • count:=danh sách kích thước k và điền bằng 0
  • với mỗi n trong nums, thực hiện
    • count [n mod k]:=count [n mod k] + 1
  • nếu số [0] là chẵn, thì
    • trả về Sai
  • đối với tôi trong phạm vi từ 1 đến thương của (k / 2), hãy thực hiện
    • nếu count [i] không giống với count [k - i], thì
      • trả về Sai
  • trả về True

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:

Ví dụ

class Solution:
   def solve(self, nums, k):
      if len(nums) % 2:
         return False

      count = [0] * k
      for n in nums:
         count[n % k] += 1

      if count[0] % 2:
         return False

      for i in range(1, k // 2 + 1):
         if count[i] != count[k - i]:
            return False
      return True

ob = Solution()
nums = [4, 7, 2, 5]
k = 6
print(ob.solve(nums, k))

Đầu vào

[4, 7, 2, 5], 6

Đầu ra

True