Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình tìm mảng các cặp gấp đôi trong Python

Cho mảng nums độ dài chẵn. Kiểm tra có thể sắp xếp lại sao cho nums[2*i+1] = 2 * nums[2*i] với mọi i.

Ví dụ: nums=[4,-2,2,-4] → True (sắp: [-2,-4,2,4] hoặc [2,4,-2,-4]).

Giải thuật (Sắp xếp theo giá trị tuyệt đối)

  1. Đếm tần suất cnt.
  2. Duyệt các key theo abs(key) tăng dần:
    • Nếu cnt[x] > cnt[2*x]: không đủ đôi → False.
    • Trừ cnt[2*x] -= cnt[x].
  3. Trả về True.

Sắp xếp theo |x| đảm bảo xử lý số nhỏ trước, tránh dùng số làm đôi cho 2 cặp.

Ví dụ minh họa

from collections import Counter

def solve(nums):
    cnt = Counter(nums)
    for x in sorted(cnt, key=abs):
        if cnt[x] > cnt[2 * x]:
            return False
        cnt[2 * x] -= cnt[x]
    return True

nums = [4,-2,2,-4]
print(solve(nums))

Đầu vào

[6,0,8,2,1,5]

Đầu ra

True