[leetcode75.]颜色分类

    科技2024-06-28  67

    题目:

    解题分析:

    用双指针进行一次遍历,p0表示0子串的尾巴,p2表示2子串的头部

    遍历开始,i从数组的0开始,找到0,将p0移后一位,继续找;找到2,将2与p2交换,并且p2移前一位,同时i不能移动要循环验证a[i]是否为2,直至不是2,再移动。

    这个循环验证很重要,因为可能交换回来的依旧为2.

    class Solution { public void sortColors(int[] nums) { int n = nums.length; int p0 = 0, p2 = n - 1; for (int i = 0; i <= p2; ++i) { while (i <= p2 && nums[i] == 2) { int temp = nums[i]; nums[i] = nums[p2]; nums[p2] = temp; --p2; } if (nums[i] == 0) { int temp = nums[i]; nums[i] = nums[p0]; nums[p0] = temp; ++p0; } } } }

     

    Processed: 0.009, SQL: 8