題目描述:
輸入一個(gè)整數(shù)數(shù)組,實(shí)現(xiàn)一個(gè)函數(shù)來(lái)調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分,所有的偶數(shù)位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對(duì)位置不變。
我的思路:
- 首先排除特殊情況,當(dāng)數(shù)組少于兩個(gè)元素的時(shí)候,不需要排序,直接返回?cái)?shù)組。
- 然后以i為標(biāo)進(jìn)行遍歷,同時(shí)設(shè)置flag標(biāo)記已經(jīng)排序的奇數(shù)最后一位。
- 當(dāng)i指向偶數(shù)時(shí),flag不變,i繼續(xù)循環(huán)后移。
- 當(dāng)i指向奇數(shù)是分兩種情況:
a. 前面一位就是奇數(shù)。說(shuō)明前邊是已經(jīng)正確的序列,只需要將flag后移一位,然后i繼續(xù)循環(huán)
b. 前面一位是偶數(shù)。這時(shí)候需要將當(dāng)前的元素插至flag后面一位。然后flag后移一位,i繼續(xù)循環(huán)。
我的解答:
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
flag = 0
if len(array) <2:
return array
for i in range(len(array)):
if array[i]%2 ==0:
continue
elif array[i]%2==1 and array[i-1]%2==1:
flag +=1
else:
for j in range(i,flag,-1):
self.exch(array,j,j-1)
flag +=1
return array
def exch(self,array,i,j):
tmp = array[i]
array[i] = array[j]
array[j] = tmp