1.題目描述
2.思路
3.代碼實現
class Solution {public void sortColors(int[] nums) {int low = 0; // 下一個 0 應該放的位置int mid = 0; // 當前檢查的位置int high = nums.length - 1; // 下一個 2 應該放的位置while (mid <= high) {if (nums[mid] == 0) { // 把 0 放到前面swap(nums, low, mid);low++;mid++;} else if (nums[mid] == 2) { // 把 2 放到后面swap(nums, mid, high);high--; // mid 不加,讓換來的元素再檢查} else { // nums[mid] == 1mid++; // 1 留在中間}}}private void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
}
帶測試方法
public class H75 {public int[] sortColors(int[] nums) {//指向下一個0的位置int left=0;// 當前檢查的位置,掃描數組的元素int mid=0;//指向最后一個位置int right=nums.length-1;while(mid<=right){if(nums[mid]==2){//把2放在后面swap(nums,mid,right);right--;}else if(nums[mid]==0) {// 把 0 放到前面swap(nums, mid, left);mid++;left++;}else{// // nums[mid] == 1mid++;//直接遍歷下一個1元素,但是mid指針不能大于right指針}}return nums;}private void swap(int[] arr, int i, int j) {int tmp=arr[i];arr[i]=arr[j];arr[j]=tmp;}public static void main(String[] args){H75 test=new H75();int[] nums={2,0,2,1,1,0};int[] res=test.sortColors(nums);//System.out.println(res);for(int num:res){System.out.println(num+" ");}}}