剑指 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

参考

Krahets - 力扣(LeetCode) (leetcode-cn.com)

以上是关于剑指 Offer 21. 调整数组顺序使奇数位于偶数前面的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer打卡21. 调整数组顺序使奇数位于偶数前面

#yyds干货盘点#剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

剑指offer--21调整数组顺序使奇数位于偶数前

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

算法剑指 Offer 21. 调整数组顺序使奇数位于偶数前面