1.荷兰国旗问题
传入num 数组中大于num的数放左边 小于num的数放右边 等于num的数 放中间
1.1 结题思路
构造三个变量 cur指针指向arr[0]
less指针指向arr[-1] less 是全部比num小的数
more 指针指向arr[lentgh] more是全部比num大的数
1 当arr[cur]==num cur++;
2 当arr[cur]>num 交换arr[--more]与arr[cur]
3 当arr[cur]<num 交换arr[++less]与arr[cur ] 并且cur++
循环此过程 直到cur==more为止
public static int[] partition(int arr[],int l,int r,int num){
int less=l-1;
int more=r+1;
int cur=l;
while(cur<more){
if(arr[cur]<num){
swap(arr,++less,cur++);
}else if(arr[cur]>num){
swap(arr,--more,cur);
}else{
cur++;
}
}
return new int[]{less+1,more-1};
}
网友评论