สมมติว่ามีรายการตัวเลขชื่อ nums เราต้องจัดเรียงอาร์เรย์โดยคงเงื่อนไข
- เลขคู่เรียงเพิ่มขึ้น
- เลขคี่เรียงลดลง
- ตำแหน่งสัมพัทธ์ของเลขคู่และเลขคี่ไม่เปลี่ยน
เช่น ถ้าอินพุตคือ [9, 14, 12, 91, -4, 5] ผลลัพธ์จะเป็น [91, -4, 12, 9, 14, 5]
ขั้นตอนการแก้ปัญหา
- evens := รายการเลขคู่ใน nums
- odds := รายการเลขคี่ใน nums
- เรียง evens, เรียง odds ใหม่ลดลง
- even_i := 0, odd_i := 0
- for index ในช่วง 0 ถึงขนาดของ nums
- ถ้า nums[index] mod 2 == 0 nums[index] := evens[even_i], even_i += 1
- มิฉะนั้น nums[index] := odds[odd_i], odd_i += 1
- คืนค่า nums
ตัวอย่างโค้ด
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]