劍指offer 66道-python+JavaScript
調整數組順序使奇數位於偶數前面
題目描述
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
思路
分別用python和javascript實現
第一種方法僅僅實現了前面是奇數,後面是偶數。
第二種方法實現前面是奇數,後面是偶數,且保持相對位置不變。
github
python代碼鏈接: https://github.com/seattlegirl/jianzhioffer/blob/master/odd_even.py.
題目代碼(python)
# -*- coding:utf-8 -*-
#法一 只能實現前面是奇數,後面是偶數,無法保持相對位置不變
class Solution:
def reOrderArray1(self, array):
# write code here
l=0
r=len(array)-1
while(l<r):
while(l<r and not isEven(array[l])):
l+=1
while(l<r and isEven(array[r])):
r-=1
if(l<r):
temp=array[l]
array[l]=array[r]
array[r]=temp
return array;
#是不是偶數
def isEven(n):
if n%2==0:
return true;
else:
return false;
#開闢多個數組,遍歷,能保證前面是奇數,後面是偶數,且保持相對位置不變
class Solution:
def reOrderArray2(self, array):
arr1=[]
arr2=[]
for i in range(0,len(array)):
if(array[i]%2==0):
arr2.append(array[i]);
else:
arr1.append(array[i]);
arr3=[]
arr3=arr1+arr2
return arr3
arr=Solution().reOrderArray2([1,2,3,4,5,6,7]);
for k in range(0,len(arr)):
print(arr[k])
github
JavaScript代碼鏈接: https://github.com/seattlegirl/jianzhioffer/blob/master/odd_even.js.
題目代碼(JavaScript)
//法一 只能實現前面是奇數,後面是偶數,無法保持相對位置不變
function reOrderArray1(array)
{
// write code here
var l=0;
var r=array.length-1;
while(l<r){
while(l<r && !isEven(array[l])){
l++;
}
while(l<r && isEven(array[r])){
r--;
}
if(l<r){
var temp;
temp=array[l];
array[l]=array[r];
array[r]=temp;
}
}
return array;
}
//是不是偶數
function isEven(n){
if(n%2==0){
return true;
}
else{
return false;
}
}
//開闢多個數組,遍歷,能保證前面是奇數,後面是偶數,且保持相對位置不變
function reOrderArray2(array)
{
// write code here
var arr1=[];//存奇數
var arr2=[];//存偶數
for(var i=0;i<array.length;i++){
if(array[i]%2==0){
arr2.push(array[i]);
}
else{
arr1.push(array[i]);
}
}
var arr3=[];
arr3=arr1.concat(arr2);
return arr3;
}
var arr=reOrderArray2([1,2,3,4,5]);
for(var k=0;k<arr.length;k++){
console.log(arr[k]);
}