【LeetCode75】颜色分类(双指针)
【摘要】
1.题目
2.思路
思路很清晰:如果从0左边开始往右遍历,遇到0就扔到左边指针l处,遇到2就扔到右边指针r处,这里说的“扔”即交换两个元素的动作。
一定注意! 我们的前提是从左往右遍历,对于遇...
1.题目


2.思路
思路很清晰:如果从0左边开始往右遍历,遇到0就扔到左边指针l处,遇到2就扔到右边指针r处,这里说的“扔”即交换两个元素的动作。
一定注意!
我们的前提是从左往右遍历,对于遇到0时两个下标都要改变,而遇到2时只用改变右指针下标。
当我们交换0时i是可以increment的,因为l指的位置只有可能是1,而我们遍历时无视1,然而将2换到右边时我们需要再次检查换过来的数字,所以不要increment i。
3.代码
class Solution(object):
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
n = len(nums)
i = 0
l = 0
r = n - 1
while i <= r:
if nums[i] == 0:
nums[i], nums[l] = nums[l], nums[i]
i += 1
l += 1
elif nums[i] == 2:
nums[i], nums[r] = nums[r], nums[i]
r -= 1
else:
i += 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/116957371
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)