Cho danh sách nums, sắp xếp sao cho:
- Các số chẵn tăng dần.
- Các số lẻ giảm dần.
- Vị trí tương đối của số chẵn/lẻ không thay đổi.
Ví dụ
Đầu vào: [9, 14, 12, 91, -4, 5].
Đầu ra: [91, -4, 12, 9, 14, 5].
Thuật toán
- Tách danh sách số chẵn
evensvà số lẻodds. - Sắp xếp
evenstăng,oddsgiảm. - Duyệt lại mảng gốc, thay thế số chẵn bằng phần tử tiếp theo của
evens, số lẻ bằng phần tử tiếp theo củaodds.
Mã nguồn Python
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 = 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]))
Đầu vào / Đầu ra
Input: [9, 14, 12, 91, -4, 5]
Output: [91, -4, 12, 9, 14, 5]