牛客网/剑指offer/4.调整数组顺序是奇数位于偶数前面
python算法:
1.range函数
range(start, stop[, step])
start默认从0开始,step默认为1。(只有一个参数,默认为0-n;两个参数,默认步长为1。)
循环范围:左闭右开,不包含stop, 如:range(0,5) 。循环范围为:[0,1,2,3,4]
2.for循环
for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
for i in array:
若array是列表,则i为列表中按序的一个个元素,若array为字符串,则i为其中的一个个字母。
for i in range(len(array)): //通过索引遍历,则i是下标
for i in range(10,20) //通过 循环迭代10-20的值
3.交换两数
i,j = j,i //交换i和j
算法思路:
解法一:(常规解法)
1.建立一个数组用于暂存
2.遍历数组两次,第一次按序取出基数元素。
3.第二次安按序取出偶数元素
算法分析:
时间复杂度 O(n)
空间复杂度 O(n)
解法二:(不用辅助空间)
用冒泡排序,每轮比较的时候,如果前一个数为奇数,后一个数为偶数,则需要交换两数,这样经过多轮比较,全部偶数就会沉入数组后面。
算法分析:
时间复杂度 O(n^2)
空间复杂度 O(1)
用时间换空间
算法代码:
1.辅助数组
class Solution:
def reOrderArray(self , array ):
# write code here
ret = []
for i in array:
if i % 2 == 1:
ret.append(i)
for i in array:
if i % 2 == 0:
ret.append(i)
return ret
2.无辅助数组
for i in range(len(array)):
for j in range(len(array) - i - 1):
if array[j] % 2 == 0 and array[j+1] % 2 == 1:
array[j], array[j + 1] = array[j + 1], array[j]
return array