题目描述:
解法1:
这是一种比较暴力的解法。定义两个list集合,存放数组中的奇数和偶数。遍历数组,分别把数放进对应集合。最后从先把奇数集合里的数添加到数组里,再把偶数集合里的数添加到数组里。但是这样使用了三个for循环,所以运行时间比较长。
class Solution {
public int[] exchange(int[] nums) {
List<Integer> list1=new ArrayList<>();
List<Integer> list2=new ArrayList<>();
for(int num:nums){
if(num%2==0) list2.add(num);
else list1.add(num);
}
for(int i=0;i<list1.size();i++){
nums[i]=list1.get(i);
}
for(int i=0;i<list2.size();i++){
nums[i+list1.size()]=list2.get(i);
}
return nums;
}
}
解法2:
首先另外定义一个数组存放数据。遍历原来的数组,发现奇数,就把他加到新数组的前面,发现偶数,就把他加到新数组的后面。定义两个指针,分别指向新数组的奇数和偶数的新添加的位置。最后返回新数组即可。这种解法只需要一次for循环,因此效率较高。
class Solution {
public int[] exchange(int[] nums) {
int[] count=new int[nums.length];
int ji=0;int ou=nums.length-1;
for(int num:nums){
if(num%2==0) {
count[ou]=num;
ou--;
}
else {
count[ji]=num;
ji++;
}
}
return count;
}
}