剑指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]);
}