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)
- Đếm tần suất
cnt. - 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].
- Nếu
- 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