LeetCode刷题-75. 颜色分类
题目链接:75. 颜色分类
¶题解:
通过双指针思路将区间划分开,并进行维护区间操作!
¶题目简述:
给定0、1、2三个数字的乱序序列,按照0,1,2的顺序将相同数字排到一起!
要求不使用排序函数!
¶题解:
思路:双指针,其实是三指针,i
和j
从前往后扫描,k
从后往前扫描,维护下面三个区间
0 ~ j - 1
:保证都是0j ~ i - 1
:保证都是1nums.size() - 1 ~ k + 1
:保证都是2
i
和k
相遇即排好序!
nums[i]
的三种情况:
nums[i] == 0
:swap(nums[j++], nums[i++])
交换后i
位置为1,可以直接往后走,即i++
nums[i] == 1
:该位置属于为1的区间,直接i
后移,即i++
nums[i] == 2
:swap(nums[i], nums[k--])
交换后i
位置未知,不可以直接往后走
时间复杂度: O(n)
¶AC代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论