Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình sắp xếp số chẵn tăng, số lẻ giảm nhưng giữ vị trí tương đối trong Python

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

  1. Tách danh sách số chẵn evens và số lẻ odds.
  2. Sắp xếp evens tăng, odds giảm.
  3. 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ủa odds.

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]