Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”
[本文出自天外归云的博客园]
看到一个《剑指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解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”的更多相关文章
- 剑指Offer12 数组奇数调整至偶数前
/************************************************************************* > File Name: 12_Reorde ...
- 剑指offer之 奇数偶数数组位置调整且保存顺序不变
public class Solution { public void reOrderArray(int [] array) { reOrderCore(array,array.length); } ...
- 剑指offer:调整数组顺序使奇数位于偶数前面
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...
- 牛客网剑指offer第13题——调整数组顺序使得奇数位于偶数前面
题目来源:剑指offer 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变 ...
- 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...
- 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这 ...
- 剑指OFFER——调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 剑指offer书里的版本, ...
- 剑指Offer——回溯算法解迷宫问题(java版)
剑指Offer--回溯算法解迷宫问题(java版) 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路. 下面我们来详细讲一 ...
- 《剑指offer》 调整数组顺序使得奇数在偶数前面
本题来自<剑指offer> 调整数组顺序使得奇数在偶数前面 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分, ...
随机推荐
- tensorflow相关API的学习
学习目录 1.tensorflow相关函数理解 (1)tf.nn.conv2d (2)tf.nn.relu (3)tf.nn.max_pool (4)tf.nn.dropout (5)tf.nn.si ...
- 在netcore中如何注入同一个接口的多个实现
netcore中自带了Ioc框架,这也影响了我们的编码习惯,以前都是静态类或者直接new对象,现在有了Ioc框架的支持,我们也不必守旧,应当使用起来,接受这种对象管理方式.使用过java的同仁,都习惯 ...
- 一次线上FullGC问题记录
标题采自:英雄联盟-瑞文:断剑重铸之日,骑士归来之时! 断剑 前两天早上在挤地铁的时候看到小组群里,主管发了好多消息,打开来一看,说是XX项目自从22号发版后,每天晚上就疯狂Full GC,让 ...
- 初识Style和Theme
初识Style和Theme 学习自 http://www.jcodecraeer.com/a/basictutorial/2016/0812/6533.html 认识Style 大家还记得如何设置一个 ...
- BZOJ.4793.[CERC2016]Hangar Hurdles(Kruskal重构树 BFS)
题目链接 \(Description\) 有一个\(n\times n\)的正方形网格,上面有若干障碍点.\(q\)次询问,每次询问把一个正方形箱子从\((x1,y1)\)推到\((x2,y2)\) ...
- IE6条件下的bug与常见的bug及其解决方法
1.IE6条件下有双倍的margin 解决办法:给这个浮动元素增加display:inline属性 2. 图片底部有3像素问题 解决办法:display:block;或者vertical-align: ...
- ADC and DAC Analog Filters for Data Conversion
Figure 3-7 shows a block diagram of a DSP system, as the sampling theorem dictates it should be. Bef ...
- event对象中 target和currentTarget 属性的区别。
首先本质区别是: event.target返回触发事件的元素 event.currentTarget返回绑定事件的元素
- AngularJS中控制器继承
本篇关注AngularJS中的控制器继承,了解属性和方法是如何被继承的. 嵌套控制器中属性是如何被继承的? ==属性值是字符串 myApp.controller("ParentCtrl&qu ...
- Oracle 11g不同情形下的登录分析
对于Oracle刚開始学习的人.甚至有些经验的Oracle DBA来说,Oracle的账户登录问题往往非常棘手.即便成功登录oracle也是知其然而不知其所以然. 作者经过系统学习和重复实践,本着打破 ...