zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

PythonLeetCode数组 顺序 调整 Offer 21 刷题
2023-09-14 09:13:02 时间

1 题目

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。

示例:

输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2 解析

(1)方法一
使用python内置的双端队列,队头和队尾都可以插入
(2)方法二
使用双指针,左边插入一个,左指针往右移动1,右边插入一个,右指针往左移动1

3 python 实现

(1)方法一


class Solution:
    def exchange(self, nums: List[int]) -> List[int]:
        import collections
        d = collections.deque()
        for i in nums:
            if i%2==0:
                d.append(i)
            else:
                d.appendleft(i)
        return list(d)

(2)方法二

class Solution:
    def exchange(self, nums: List[int]) -> List[int]:
        n = len(nums)
        res,left,right = [0]*n,0,n-1
        for i in nums:
            if i%2==0:
                res[right] = i
                right-=1
            else:
                res[left] = i
                left +=1
        return res