[本文出自天外归云的博客园]

看到一个《剑指Offer》上的问题:“遇到奇数移至最前,遇到偶数移至最后。”

我做了两种解法。一种是利用python内置函数,移动过程用了插入法,很简单。另一种是自定义与数字相关的类与函数,移动的过程用了指针思想。

代码如下:

'''
解法1:利用python中与列表相关的内置函数
'''
from collections import deque def move_numbers(numbers: list, new_numbers=deque()):
numbers = deque(numbers)
while len(numbers) > 0:
if numbers[0] % 2 == 0:
number = numbers.popleft()
new_numbers.append(number)
else:
number = numbers.popleft()
new_numbers.appendleft(number)
print(list(new_numbers)) '''
解法2:自定义与数字相关的类与函数
''' class Numbers:
header = None
tail = None
numbers = None class Number:
def __init__(self, value):
self.value = value
self.next = None def __init__(self, *args):
self.numbers = tuple([Numbers.Number(arg) for arg in args])
self.install(self.numbers) def install(self, args: tuple):
for i in range(len(args)):
number = args[i]
if i == 0 and len(args) > 1:
number.next = args[i + 1]
self.header = number
if i > 0 and i < len(args) - 1:
number.next = args[i + 1]
if i == len(args) - 1 and len(args) > 1:
self.tail = number def show(self):
subs = []
index = self.header
while index:
subs.append(index.value)
index = index.next
print(subs) def move(self):
index = self.header
new_header = None
for i in range(len(self.numbers)):
_next = index.next
if index.value % 2 == 0:
index.next = None
self.tail.next = index
self.tail = index
if index.value % 2 != 0 and i != 0:
if new_header:
index.next = new_header
new_header = index
else:
new_header = index
new_header.next = self.header
self.header = new_header
index = _next
self.show() '''
题目:
遇到奇数移动到最前面
遇到偶数移动到最后面
'''
if __name__ == '__main__':
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] # 解法1
move_numbers(numbers) # 解法2
Numbers(*numbers).move()

其中:

1. 内置数据类型collections.deque是python中的队列,在队头插入和弹出元素比list的insert和pop操作效率高

2. 在main函数中将list类型的numbers转化为*args进行Numbers类对象初始化

Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”的更多相关文章

  1. 剑指Offer12 数组奇数调整至偶数前

    /************************************************************************* > File Name: 12_Reorde ...

  2. 剑指offer之 奇数偶数数组位置调整且保存顺序不变

    public class Solution { public void reOrderArray(int [] array) { reOrderCore(array,array.length); } ...

  3. 剑指offer:调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...

  4. 牛客网剑指offer第13题——调整数组顺序使得奇数位于偶数前面

    题目来源:剑指offer 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变 ...

  5. 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】

    来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...

  6. 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)

    问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这 ...

  7. 剑指OFFER——调整数组顺序使奇数位于偶数前面

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 剑指offer书里的版本, ...

  8. 剑指Offer——回溯算法解迷宫问题(java版)

    剑指Offer--回溯算法解迷宫问题(java版)   以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路.   下面我们来详细讲一 ...

  9. 《剑指offer》 调整数组顺序使得奇数在偶数前面

    本题来自<剑指offer> 调整数组顺序使得奇数在偶数前面 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分, ...

随机推荐

  1. mac配置php7运行环境

    不用mac自带的apache和php,安装自己想要的版本.配置过程一直采坑,需要有闲时间和好的心理素质才行,哈哈,因为网上很教程都有纰漏之处,所以先把采坑无数后发现的个人认为最好的一个教程链接放在这里 ...

  2. 爬虫之Resquests模块的使用(二)

    Requests Requests模块 Requests模块是一个用于网络访问的模块,其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能 ...

  3. BZOJ.2434.[NOI2011]阿狸的打字机(AC自动机 树状数组 DFS序)

    题目链接 首先不需要存储每个字符串,可以将所有输入的字符依次存进Trie树,对于每个'P',记录该串结束的位置在哪,以及当前节点对应的是第几个串(当前串即根节点到当前节点):对于'B',只需向上跳一个 ...

  4. 用type动态创建Form

    type时所有元类的父亲object是type(object的类型是type),type也是object(type继承自object) >>> isinstance(object, ...

  5. windows下配置 GNU的gdb调试功能

    1.配置 修改环境变量(前提电脑中存在gdb.exe) 1. 我的电脑->属性->环境......在path那一项后面添加你DEV-C++ Bin目录的路径(gdb.exe所在目录),如: ...

  6. mongodb副本集 statestr状态说明/解释

    STARTUP:刚加入到复制集中,配置还未加载 STARTUP2:配置已加载完,初始化状态 RECOVERING:正在恢复,不适用读 ARBITER: 仲裁者 DOWN:节点不可到达 UNKNOWN: ...

  7. oracle中类似indexof用法_instr函数

    oracle中类似indexof用法_instr函数 [sql] 在oracle中没有indexof()函数 但是提供了一个 instr() 方法 具体用法: select instr('保定市南市区 ...

  8. TXB0108 TXS0108E 8-Bit Bidirectional Voltage-Level Translator for Open-Drain and Push-Pull Applications

    TXS(开漏优化设计),如I2C TXB(上拉优化设计),如SPI TXS0108 has integrated pull-up resistors to save board space and c ...

  9. app v1界面

         

  10. 报错:bash: pip: command not found

    $ wget https://bootstrap.pypa.io/get-pip.py$ python get-pip.py$ pip -V #查看pip版本