21. 调整数组顺序使奇数位于偶数前面
思路一:插入排序思想
遍历数组,当是奇数时就跟前面的偶数列交换位置,直到前面是奇数
for (int i = 0; i > nums.length; i--) {
if (nums[i] % 2 != 0) {
for (int j = i - 1; j > 0; j--) {
if (nums[j] % 2 == 0) {
int a = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = a;
}
}
} else {
break;
}
}
return nums;
}
思想1.5:新建一个数组来放,前面放奇数后面放偶数
class Solution {
public int[] exchange(int[] nums) {
int[] n1 = new int[nums.length];
int count = 0;
int k = nums.length-1;
for (int i = 0; i < nums.length; i++) {
if (nums[i]%2!=0){
n1[count++] = nums[i];
}else{
n1[k--] = nums[i];
}
}
return n1;
}
}
思想二:两个数组分别存奇数和偶数,遍历结束后再将两个数组拼接起来。
重点注意:ArrayList 转换 int[]的方式 增强for ,没有更简单的了
!!!不能用toArray()方法,因为这个函数返回的是Object[],而不是int[]
int count = 0;
for (Integer e : odd) {
nums[count++] = e;
}
for (Integer e : even) {
nums[count++] = e;
}
return nums;
思想三:双指针之首尾指针
i,j两个指针分别在头和尾,
i往右移,j往左移,
num[i]是偶数时停,num[j]则是奇数时停,
交换偶数num[i]和奇数num[j]。
直到i==jint i = 0; int j = nums.length - 1; while (i < j) { while (i < j && (nums[i] & 1) == 1) i++; while (i < j && (nums[j] & 1) == 0) j--; int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } return nums;
思想四:双指针之快慢指针
i,j两个指针都在头,
j表示奇数下次存入的位置,
i往前遍历,
如果是奇数,就跟i交换num值
直到i=nums.lengthint j = 0; for (int i = 0; i < nums.length; i++) { if((nums[i]&1)==1){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; j++; } } return nums;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。