输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
①普通双指针解法:
class Solution {
public int[] exchange(int[] nums) {
int len = nums.length;
int l = 0 , r = len - 1;
while(l < r){
while((l < r) && (nums[l] % 2) != 0){
l++;
}
while(( l < r ) && (nums[r] % 2) == 0){
r--;
}
if(l < r){
int temp = nums[l];
nums[l] = nums[r];
nums[r] = temp;
}
l++;
r--;
}
return nums;
}
}
②可扩展的解法,解耦提高代码的重用性:
把判断奇偶性的标准变成一个函数,把整个函数解耦成两部分,这样便可扩展开解决其他问题了,比如把负数放在正数前,把能被3整除的放在不能不3整除的数字前等等。
class Solution {
public int[] exchange(int[] nums) {
int len = nums.length;
int l = 0 , r = len - 1;
while(l < r){
while((l < r) && !isOk(nums[l])){
l++;
}
while(( l < r ) && isOk(nums[r])){
r--;
}
if(l < r){
int temp = nums[l];
nums[l] = nums[r];
nums[r] = temp;
}
l++;
r--;
}
return nums;
}
public boolean isOk(int num){
return (num % 2) == 0;
}
}
如果要改变为将负数放在正数前,只需要改变isOk()方法即可。