学习交换元素的另一种写法
void swap(int[] nums,int x,int y){
if(x==y)return;//重要,没有这一句当x==y时两个都变成0
nums[x]=nums[x]^nums[y];
nums[y]=nums[x]^nums[y];
nums[x]=nums[x]^nums[y];
}
本题解:
小于2的放在[0,pos2]的位置
在上面基础上,小于1的放在[0,pos1]的位置
也可以说:
小于2的放在(pos1,pos2]的位置
class Solution {
public void sortColors(int[] nums) {
int pos2=-1;
int pos1=-1;
for(int i=0;i<nums.length;i++){
if(nums[i]<2){
pos2++;
swap(nums,pos2,i);
if(nums[pos2]<1){
pos1++;
swap(nums,pos2,pos1);
}
}
}
}
void swap(int[] nums,int x,int y){
if(x==y)return;//重要,没有这一句两个都变成0
nums[x]=nums[x]^nums[y];
nums[y]=nums[x]^nums[y];
nums[x]=nums[x]^nums[y];
}
}
原文:https://www.cnblogs.com/wsshub/p/14878288.html