「剑指Offer [Python] 」系列博文,「转载」思路详细易懂的、python语言的众大神博文,「整理 & 汇总」各方资料,「学习 & 对比」多种思路。
今天是第13题 —— 调整数组顺序使奇数位于偶数前面。
❤️ 「更多题目」
题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
一、非原地操作法
- 思路
使用两个数组,分别存储奇数和偶数,再将两个列表连接后输出。
- Python 实现
class Solution:
def reOrderArray( self, array):
# write code here
odd, even = [], []
for i in array:
even.append(i) if i%2 == 0 else odd.append(i)
return odd + even
二、原地操作法
- 思路
- 题目要求是“调整数组中数字的顺序”,即需要在原有数组上进行操作。
- 定义两个int型变量divP和searchP,divP指向左半段已经排好序的“前奇后偶”数组中最后一个奇数的位置;searchP始终位于divP的右边,指向数组右半段中出现的第一个奇数的位置。
- 定位searchP之后,依次与区间array[divP,searchP]之间的数值进行交换
- Python 实现
def reOrderArray(self, array):
divP = 0
for i in range(len(array)):
if array[i]%2 == 1:
searchP = i
while searchP > divP:
array[searchP],array[searchP-1] = array[searchP-1],array[searchP]
searchP -= 1
divP += 1
return array
---------------------
作者:goddaniel
来源:CSDN
原文:https://blog.csdn.net/u010005281/article/details/79857035
版权声明:本文为博主原创文章,转载请附上博文链接!