题目链接

关键词

{% label 双指针 green %}、{% label 排序 blue %}

解析

  • 定义三个指针:i、j、k,规定其含义如下:
    • [0, j-1]:都为0
    • [j, i-1]:都为1
    • [k, n-1]:都为2
  • 到此,问题转变为了,如果不断地缩小区间 [i,k-1],最后使其长度为0
  • 因为,可以每次移动指针i
    • 如果 nums[i] == 0, 则 swap(nums[i++], nums[j++])
    • 如果 nums[i] == 2, 则 swap(nums[i], nums[k--])
    • 否则,就 i++

代码

Leetcode_200-岛屿数量Java HashMap源码解析
Loading...