สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums ซึ่งมีความยาวเท่ากัน เราต้องตรวจสอบว่าสามารถเรียงลำดับใหม่ในลักษณะที่ nums[2*i + 1] =2*nums[2*i] สำหรับทุก ๆ 0 ได้หรือไม่ =i <ขนาดของ nums/2.
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[4,-2,2,-4] ผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
cnt :=แผนที่ที่มีองค์ประกอบทั้งหมดเป็น nums และค่าความถี่ของพวกมัน
-
สำหรับแต่ละ x ในรายการที่เรียงลำดับ cnt ซึ่งถูกจัดเรียงตามค่าสัมบูรณ์ ให้ทำ
-
ถ้า cnt[x]> cnt[2 * x] แล้ว
-
คืนค่าเท็จ
-
-
cnt[2 * x] :=cnt[2 * x] - cnt[x]
-
-
คืนค่า True
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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)) อินพุต
[6,0,8,2,1,5]
ผลลัพธ์
True