สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums เราต้องจัดเรียงอาร์เรย์โดยรักษาเกณฑ์ต่อไปนี้
- เลขคู่จะเรียงลำดับจากน้อยไปมาก
- เลขคี่เรียงลำดับจากมากไปหาน้อย
- ไม่ควรเปลี่ยนตำแหน่งสัมพัทธ์ของเลขคู่และเลขคี่
ดังนั้น หากอินพุตเป็น [9, 14, 12, 91, -4, 5] ผลลัพธ์จะเป็น [91, -4, 12, 9, 14, 5]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- evens :=รายการของพจน์คู่ในอาร์เรย์ nums
- odds :=รายการคำคี่ในอาร์เรย์ nums
- เรียงลำดับรายการเท่าๆ กัน
- even_i :=0, odd_i :=0
- สำหรับดัชนีในช่วง 0 ถึงขนาดของ nums ให้ทำ
- ถ้า nums[index] mod 2 เหมือนกับ 0 แล้ว
- nums[index] :=evens[even_i]
- even_i :=even_i + 1
- มิฉะนั้น
- nums[index] :=odds[odd_i]
- odd_i :=odd_i + 1
- ถ้า nums[index] mod 2 เหมือนกับ 0 แล้ว
- หมายเลขส่งคืน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, nums): evens = [num for num in nums if num % 2 == 0] odds = [num for num in nums if num % 2 != 0] evens.sort() odds.sort(reverse=True) even_i = 0 odd_i = 0 for index in range(len(nums)): if nums[index] % 2 == 0: nums[index] = evens[even_i] even_i += 1 else: nums[index] = odds[odd_i] odd_i += 1 return nums ob = Solution() print(ob.solve([9, 14, 12, 91, -4, 5]))
อินพุต
[9, 14, 12, 91, -4, 5]
ผลลัพธ์
[91, -4, 12, 9, 14, 5]