# Pregunta sobre la bandera holandesa

## 2. Solución

• Si el número actual cur<número, entonces ++less, cur++
• Si el número actual cur>número, entonces cur,–más
• Si el número actual cur=número, entonces cur++

## 3. Código

``````/**
* 荷兰国旗问题
* @author tyeerth
* @date 2020/10/26 - 19:19
*/
public class NetherLandsFlag {

public static int[] partition(int[] arr ,int L ,int R ,int number){

//小于number的区域
int less = L - 1;
//大于number的区域
int more = R ;
//当前指针的移动
int cur  = L;
//当前指针不能达到大于区域
while (cur < more){

if (arr[cur] < number){

swap(arr,++less,cur++);
}
else if (arr[cur] > number){

swap(arr,cur,--more);
}
else {

cur++;
}
}
//返回相等区域的下角标
return new int[]{

less+1,more-1};
}
public static void swap(int[] arr, int i, int j) {

// ^ 为异或运算。
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
// for test
public static int[] generateArray() {

int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {

arr[i] = (int) (Math.random() * 5);
}
return arr;
}

// for test
public static void printArray(int[] arr) {

if (arr == null) {

return;
}
for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] + " ");
}
System.out.println();
}

public static void main(String[] args) {

int[] test = generateArray();

printArray(test);
int[] res = partition(test, 0, test.length - 1, 1);
printArray(test);
System.out.println(res[0]);
System.out.println(res[1]);

}

}

``````

### Supongo que te gusta

Origin blog.csdn.net/qq_45372719/article/details/109296862