📅  最后修改于: 2023-12-03 14:57:47.600000             🧑  作者: Mango
本题是 "资质门 CS 1998" 系列中的第 11 道问题,难度适中。该系列题目是一系列面向初学者的编程挑战,旨在提高编程基础和编程能力。
该问题要求编写一个程序,将一个整数数组中的所有偶数放在数组的前面,所有奇数放在数组的后面,同时保持奇数和偶数原本在数组中的相对位置不变。
适中
sortArrayByParity
,接收一个整数类型数组作为输入参数。# 示例1
输入: [3,1,2,4]
输出: [2,4,3,1]
# 示例2
输入: [1,2,3,4]
输出: [2,4,1,3]
def sortArrayByParity(nums):
i, j = 0, len(nums) - 1
while i < j:
if nums[i] % 2 == 0:
i += 1
elif nums[j] % 2 == 1:
j -= 1
else:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
return nums
本题是一个经典的双指针问题,关键在于如何在不打乱数组元素顺序的情况下将奇偶数分开。使用双指针法,左指针 i 指向数组的第一个元素,右指针 j 指向数组的最后一个元素,当左指针小于右指针时,如果左指针指向的是奇数,右指针指向的是偶数,就交换两个数的位置。重复这个过程,直到左右指针相遇即可。该算法的时间复杂度为 O(n)。