classSolution: defexchange(self, nums: List[int]) -> List[int]: odd, even = [], [] for i in nums: if i % 2 == 0: even.append(i) else: odd.append(i) return odd + even
单指针
指针odd指向已确定奇数后的第一个数,遍历整个列表,若为奇数则交换。
时间复杂度:O(n),遍历列表; 空间复杂度:O(1),指针odd占用常数空间。
classSolution: defexchange(self, nums: List[int]) -> List[int]: odd = 0 for i in range(len(nums)): if nums[i] % 2 == 1: nums[odd], nums[i] = nums[i], nums[odd] odd += 1 return nums
双指针
指针odd指向前向奇数,指针even指向后向偶数,从前遍历整个列表,若为偶数则与后方交换。
时间复杂度:O(n),遍历列表; 空间复杂度:O(1),指针odd和even占用常数空间。
classSolution: defexchange(self, nums: List[int]) -> List[int]: odd, even = 0, len(nums)-1 while odd < even: if nums[odd] % 2 == 0: nums[odd], nums[even] = nums[even], nums[odd] even -= 1 else: odd += 1 return nums