https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:双指针,一个指针指向数组头部,一个指针指向数组尾部。
- 先移动头指针,当指针指向偶数时,停止移动
- 移动尾指针,指针指向奇数时停止移动
- 头尾指针元素互换
- 重复1,2,3过程,直到头尾指针相遇,数组遍历结束
时间复杂度n,空间复杂度1
class Solution(object):
def exchange(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
if len(nums) <= 1:
return nums
head = 0
end = len(nums) - 1
while head <= end:
while head <= end and nums[head] % 2 != 0:
head += 1
while head <= end and nums[end] % 2 == 0:
end -= 1
if head <= end:
tmp = nums[head]
nums[head] = nums[end]
nums[end] = tmp
return nums