题解 | #调整数组顺序使奇数位于偶数前面#
调整数组顺序使奇数位于偶数前面
http://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b
1.python 解法:本来使用了一种不用开辟新的空间,但是移动次数比较多的解法,奈何时间超标了。所以又换了一个简单的解法,简单来说就是先分奇数偶数然后再合并。
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param array int整型一维数组 # @return int整型一维数组 # class Solution: def reOrderArray(self , array ): # write code here even_list, odd_list = [], [] for num in array: if num%2:odd_list.append(num) else:even_list.append(num) odd_list.extend(even_list) return odd_list
2.go解法:使用双指针,还要额外开辟一片内存,但是速度要快很多。
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */ import "fmt" func reOrderArray( array []int ) []int { // write code here res := make([]int, len(array)) head, ptr_head := 0,0 tail, ptr_tail := len(array)-1, len(array)-1 for ptr_head<=len(array)-1 && ptr_tail>=0 { if array[ptr_head]%2 == 1{ res[head] = array[ptr_head] head ++ } if array[ptr_tail]%2 == 0{ res[tail] = array[ptr_tail] tail -- } ptr_head ++ ptr_tail -- } fmt.Printf("%v", res) return res }3.java解法:和python类似,但是写起来就要麻烦很多。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */ public int[] reOrderArray (int[] array) { // write code here ArrayList<Integer> odd_lst = new ArrayList(); ArrayList<Integer> even_lst = new ArrayList(); for(int i = 0; i<array.length;i++){ if(array[i]%2 == 1){ odd_lst.add(array[i]); } else{ even_lst.add(array[i]); } } //int[array.length] res; //System.out.println(odd_lst); for(int i=0; i<array.length; i++){ if(i<odd_lst.size()){ array[i] = odd_lst.get(i); }else{ array[i] = even_lst.get(i-odd_lst.size()); } } return array; } }