상대 위치를 고려하지 않고
제목 설명
어레이의 전방 절반의 홀수 부분 모두 모든 짝수 어레이의 후반부에 위치되도록, 배열 번호의 순서를 조절하는 기능을 실현하기 위해, 정수의 배열을 입력.
분석
사용 双指针
의 사용 생각을하고, 곧 답변을 얻을.快排
一次划分
코드
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
if not array:
return []
length = len(array)
left = 0
right = length-1
while left<right:
while left<right and not self.isEven(array[left]):
left += 1
while left<right and self.isEven(array[right]):
right -= 1
if left<right:
array[left], array[right] = array[right], array[left]
return array
def isEven(self, num):
return num & 1 == 0
상대 위치를 고려
제목 설명
배열 번호의 순서를 조절하는 기능을 실현하기 위해, 정수의 배열을 입력 어레이의 전반의 모든 홀수 부분은 홀수 어레이 전체의 후반에있는 홀수 간의 상대적 짝수, 홀수되도록 심지어 지도록 동일한 위치.
분석
- 방법 1 : 사용
python列表
이 결국 해답, 시간 복잡도에 병합 초기화 목록O(n)
, 공간의 복잡성을O(n)
. - 방법 2 : 주제에 대한 아이디어의 교환을 사용하지만,하는 일이 될 수 없습니다
快排划分
교환의 종류를 사용하는 아이디어는, 수와 상대 번호에 대한 교환의 중간에 두 번째가 교환되도록, 그렇지 않으면 동일한 상대 위치를 보장 할 수 없으며位置不变
, 사용冒泡
생각합니다.
코드
- 방법 1 :
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
if not array:
return []
even = []
odd = []
for i in array:
if i & 1 == 1:
odd.append(i)
else:
even.append(i)
odd.extend(even)
return odd
- 방법 2 :
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
if not array:
return []
length = len(array)
left = 0
while left < length:
# 寻找左边第一个偶数
while left < length and not self.isEven(array[left]):
left += 1
right = left+1
# 寻找此偶数后面的第一个奇数奇数
while right < length and self.isEven(array[right]):
right += 1
#按顺序排列交换
if left<length and right<length:
temp = array[right]
for i in range(right,left,-1):
array[i] = array[i-1]
array[left] = temp
if left<length and self.isEven(array[left]):
break
return array
def isEven(self, num):
return num & 1 == 0