当前位置 : 主页 > 编程语言 > python >

【LeetCode 中级算法】颜色分类

来源:互联网 收集:自由互联 发布时间:2022-06-18
【中级算法】​​颜色分类​​ 想法: 01.使用三指针解决这个问题 i指针指向最小值;j指针指向最大值,k指针在二者之间移动,进行数据的交换 02.这道题有点儿我的解法还欠妥,需要


【中级算法】​​颜色分类​​

想法:

  • 01.使用三指针解决这个问题
    i指针指向最小值;j指针指向最大值,k指针在二者之间移动,进行数据的交换

  • 02.这道题有点儿我的解法还欠妥,需要再完善一下。
    为了解决上面这个问题,我投懒了一下,人为保证输入的数据中有0,2两种数据,然后在得到有序的数据上,再进行删除。这样就可以保证排序的正确性。【但是这点儿操作有点儿冗余,如果中间的判断过程完善的话,应该是不需要插入再删除的那四行代码】

  • python中数据的交换可以直接用 ​​a,b=b,a​​的方式,不用使用中间变量。


from typing import List
from queue import Queue
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
nums.insert(0,0)
nums.append(2)
i ,k = 0,1
j = len(nums) - 1
# nums[i] 左往右第一个不是0的值
# nums[j] 右往左第一个不是2的值
while(k < len(nums)):
# 始终保证 nums[i] 是在最小值位置
# 从左往右
while i<len(nums) and nums[i] ==0:
i+=1
# 这个时候 nums[i]!=0

# 从右往左
while j>=0 and nums[j] == 2:
j-=1 #

# BUG: 因为这个必须有0和2才交换,所以对于样例 [2,1] 这种就失败了
if nums[k] == 0 and i < len(nums) and k>i : # 与nums[i]交换
nums[k] ,nums[i] = nums[i],nums[k]
i+=1
k-=1
elif nums[k] == 2 and j>=0 and k<j: # 与nums[j] 交换
nums[k] ,nums[j] = nums[j],nums[k]
j-=1
k-=1
k+=1
del nums[0]
del nums[-1]
print(nums)

s = Solution()
s.sortColors([2,0,2])



上一篇:如何消除代码shi山中的一坨参数列表?
下一篇:没有了
网友评论