Skip to content

Latest commit

 

History

History
49 lines (37 loc) · 1.59 KB

75. 颜色分类.md

File metadata and controls

49 lines (37 loc) · 1.59 KB

75. 颜色分类

解题思路

  • int n = nums.length;:获取数组的长度。
  • int p1=0, p2=n-1;:设置两个指针,p1指向数组的开始,用于交换0;p2指向数组的末尾,用于交换2。
  • for(int i = 0; i < n; i++):遍历数组。
  • while(i <= p2 && nums[i] == 2):当当前元素为2时,将其与p2位置的元素交换,p2减1。这是为了将所有的2都移动到数组的末尾。
  • if(nums[i] == 0):如果当前元素为0,将其与p1位置的元素交换,p1加1。这是为了将所有的0都移动到数组的前面。
  • 交换元素时使用了临时变量temp来帮助交换。
class Solution {
    public void sortColors(int[] nums) {
        // 排序 从小到大 然后相同的元素需要在一起


        // 双指针交换
        int n = nums.length;
        int p1 = 0;
        int p2 = n - 1;

        for(int i = 0; i < n; i++){

            // 当前元素为2的时候 与p2位置进行交换 将数字2移动到数组的末尾
            // 交换后,i的位置上现在是原来p2位置上的元素。
            // 此时,这个新到i位置的元素还没有被检查,因此不能简单地将i递增
            while(i <= p2 && nums[i] == 2){
                int temp = nums[i];
                nums[i] = nums[p2];
                nums[p2] = temp;
                p2--;
            }

            // 当前元素为0 移动到数组前面
            if(nums[i] == 0){
                int temp = nums[i];
                nums[i] = nums[p1];
                nums[p1] = temp;
                p1++;
            }
        }

        
    }
}