2025年- H84-Lc192--75.颜色分类(技巧、三路指针排序)--Java版

1.题目描述

2025年- H84-Lc192--75.颜色分类(技巧、三路指针排序)--Java版_第1张图片

2.思路

2025年- H84-Lc192--75.颜色分类(技巧、三路指针排序)--Java版_第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] == 1
                mid++;                     // 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] == 1
                mid++;//直接遍历下一个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+" ");
            }

        }

}

你可能感兴趣的:(java,leetcode,java,算法,排序算法)