สมมติว่าเรามีอาร์เรย์ที่เรียกว่า 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