剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Posted 炫云云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 21. 调整数组顺序使奇数位于偶数前面相关的知识,希望对你有一定的参考价值。
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
1 <= nums[i] <= 10000
辅助数组
- 遍历一遍nums,奇数放在odd列表中,偶数放在even列表中,最后返回 odd + even
class Solution(object):
def exchange(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
odd = []
even = []
for num in nums :
if num %2 ==1:
odd.append(num)
else:
even.append(num)
return odd+even
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
头尾双指针
- 定义头指针 l e f t left left,尾指针 r i g h t right right .
- l e f t left left一直往右移,直到它指向的值为偶数
- r i g h t right right 一直往左移, 直到它指向的值为奇数
- 交换
nums[left]
和nums[right]
. - 重复上述操作,直到
left == right
.
class Solution(object):
def exchange(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
left ,right = 0,len(nums) -1
while left<right:
if nums[left] %2 ==1:
left +=1
continue
if nums[right] %2==0:
right -=1
continue
nums[left] , nums[right] =nums[right], nums[left]
return nums
快慢双指针
- 定义快慢双指针 f a s t fast fast 和 l o w low low , f a s t fast fast 在前, l o w low low 在后 .
- f a s t fast fast 的作用是向前搜索奇数位置, l o w low low 的作用是指向下一个奇数应当存放的位置
- f a s t fast fast 向前移动,当它搜索到奇数时,将它和 n u m s [ l o w ] nums[low] nums[low] 交换,此时 l o w low low 向前移动一个位置 .
- 重复上述操作,直到 f a s t fast fast 指向数组末尾 .
class Solution(object):
def exchange(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
low = fast = 0
while fast < len(nums):
if nums[fast] % 2 ==1: #奇数
nums[low] , nums[fast] = nums[fast],nums[low]
low +=1
fast +=1
return nums
参考
以上是关于剑指 Offer 21. 调整数组顺序使奇数位于偶数前面的主要内容,如果未能解决你的问题,请参考以下文章