Leetcode75. 颜色分类(JAVA双指针)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode75. 颜色分类(JAVA双指针)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/sort-colors/

解题思路

这题其实是三指针,用p0记录当前遍历完的下一个要放0的下标,用p2记录当前遍历完的下一个要放2的下标,用i来遍历数组。

代码

class Solution {
    public void sortColors(int[] nums) {
        int p0 = 0;         //指向0的位置
        int p2 = nums.length - 1;   //指向2的位置
        for(int i = 0; i <= p2; i++) {
             while(i <= p2 && nums[i] == 2) {   //如果nums[i]==2,就移到最后的位置上去,因为不能确定nums[p2]的位置是不是2,所以要用while循环,保证最后都是2
                int t = nums[i];
                nums[i] = nums[p2];
                nums[p2] = t;
                p2--;
            }
            if(nums[i] == 0) {  //如果是0,就和前面标记的p0这个位置交换
                int t = nums[i];
                nums[i] = nums[p0];
                nums[p0] = t;
                p0++;
            }
        }
    }
}

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

以上是关于Leetcode75. 颜色分类(JAVA双指针)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode.排序.75颜色分类-Java

LeetCode刷题笔记-数据结构-day2

数组及排序LeetCode刷题记录

数组及排序LeetCode刷题记录

75. 颜色分类

LeetCode:颜色分类75