输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
解法一
第一次循环遍历数组,找到第一个奇数
遍历奇数之前的数组,找到第一个偶数,并交换奇数和偶数
public class Solution {
public void reOrderArray(int [] array) {
int temp = 0;
for(int i = 0; i < array.length; i++) {
if((array[i] & 1) == 1) {
for(int j = 0; j < i; j++) {
if((array[j] & 1) == 0) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
}
}
解法二
以空间换时间的思路,定义一个和原数组大小相同的新数组,并且遍历原数组,同时从两端进行判断,左边负责判断奇数,遇到就放入新数组(正向放入);右边负责判断偶数,遇到就放入新数组(后从向前放),一遍循环结束,新数组就是我们想要的结果
public class Solution {
public void reOrderArray(int [] array) {
int[] temp = new int[array.length];
int low = 0;
int high = array.length - 1;
for(int i = 0; i < array.length; i++) {
if((array[i] & 1) == 1) {
temp[low] = array[i];
low++;
}
if((array[array.length - i - 1] & 1) == 0) {
temp[high] = array[array.length - i - 1];
high--;
}
}
for(int i = 0; i < temp.length; i++) {
array[i] = temp[i];
}
}
}
相关文章
暂无评论...