解法一:双指针
public int[] Exchange(int[] nums) {int head = 0;int tail = nums.Length - 1;while(head < tail){if((nums[head] & 1) == 1){head++;continue;}else if((nums[tail] & 1) == 0){tail--;continue;}else{int temp = nums[head];nums[head] = nums[tail];nums[tail] = temp;head++;tail--;} }return nums;}
解法二:快慢指针
//快慢指针public int[] Exchange(int[] nums) {int low = 0;int fast = 0;while(fast < nums.Length){if((nums[low] & 1) == 0){if((nums[fast] & 1) == 1){int temp = nums[low];nums[low] = nums[fast];nums[fast] = temp;low++;}fast++;}else{low++;fast++;} }return nums;}
优化点1:用与操作代替求余操作
如:if((nums[head] & 1) == 1)
优化点2:用异或实现交换操作,速度更快的同时节约一个临时变量
nums[slow] ^= nums[fast];
nums[fast] ^= nums[slow];
nums[slow] ^= nums[fast];