双指针 原地算法就可以解决
收获是在提交里面看到了一种用位运算来实现两数互换(利用异或运算的可结合性 和 自己与自己异或得 1 得特性)
nums[p] = nums[p] ^ nums[q];
nums[q] = nums[p] ^ nums[q];
nums[p] = nums[p] ^ nums[q];
1ms 100%
class Solution {
public int[] exchange(int[] nums) {
int l = 0, r = nums.length - 1;
while(l < r){
if(nums[l] % 2 == 1){
l++;
continue;
}
if(nums[r] % 2 == 0){
r--;
continue;
}
int t = nums[l];
nums[l] = nums[r];
nums[r] = t;
r --;
}
return nums;
}
}