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+" ");}}}