本文主要是介绍(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
牛客
Leetcode
【思路1】双指针 i , j 分别指向数组左右两端,循环找奇偶数
算法流程:
- 初始化: i , j 双指针,分别指向数组 nums 左右两端;
- 循环交换: 当 i = j 时跳出;
指针 i 遇到奇数,则执行 i = i + 1 跳过,直到找到偶数;
指针 j 遇到偶数,则执行 j = j - 1 跳过,直到找到奇数;
交换 nums[i] 和 nums[j] 值;
这里一定可以交换,如果没有,那就 i = j 退出循环了
- 返回值: 返回已修改的 nums 数组 (奇前 偶后)。
class Solution:def exchange(self, nums):i, j = 0, len(nums) - 1while i < j:# 当搜索到偶数时 跳出循环,此时的i是 该偶数的 下标while i < j and nums[i] & 1 == 1: i += 1# 当搜索到奇数时 跳出循环,此时的j是 该奇数的 下标while i < j and nums[j] & 1 == 0: j -= 1# 交换两个值nums[i], nums[j] = nums[j], nums[i]return nums
'''
作者:jyd
链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/solution/mian-shi-ti-21-diao-zheng-shu-zu-shun-xu-shi-qi-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
'''
注:x&1 位运算 等价于 x%2 取余运算,即皆可用于判断数字奇偶性。
【思路2】双端队列
创建双端队列 deque,遍历数组,奇数前插入,偶数后插入
class Solution:def exchange(self, nums):odd = collections.deque()l = len(nums)for i in range(l):if nums[l-i-1] % 2 != 0: # l-i-1 从后到前odd.appendleft(nums[-i-1])if nums[i] % 2 == 0: # i 从前到后odd.append(nums[i])return list(odd)
这篇关于(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!