博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
阅读量:4089 次
发布时间:2019-05-25

本文共 1210 字,大约阅读时间需要 4 分钟。

在这里插入图片描述

【思路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) - 1        while 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)
你可能感兴趣的文章
实践这一次,彻底搞懂浏览器缓存机制
查看>>
Koa2教程(常用中间件篇)
查看>>
React Hooks 完全指南
查看>>
nvm 和 nrm 的安装与使用
查看>>
总结vue知识体系之实用技巧
查看>>
PM2 入门
查看>>
Flutter ListView如何添加HeaderView和FooterView
查看>>
Flutter key
查看>>
Flutter 组件通信(父子、兄弟)
查看>>
Flutter Animation动画
查看>>
Flutter混合开发二-FlutterBoost使用介绍
查看>>
Flutter 混合开发框架模式探索
查看>>
Flutter 核心原理与混合开发模式
查看>>
Flutter Boost的router管理
查看>>
Android Flutter混合编译
查看>>
微信小程序 Audio API
查看>>
[React Native]react-native-scrollable-tab-view(进阶篇)
查看>>
Vue全家桶+Mint-Ui打造高仿QQMusic,搭配详细说明
查看>>
React Native应用部署/热更新-CodePush最新集成总结(新)
查看>>
react-native-wechat
查看>>