python刷题用leet_零基础Leetcode-python刷题报告(1)

从一月二十开始成为了Leetcode刷题大军中的一员,然而自己水平实在太渣一个多月只刷了五十五道还有很多是看得答案——甚至有一些答案都看不懂(宝宝心里苦)

目前按照网上的教程刷完了数组,查找表,链表三个章节一些比较有代表性的题目,所以特地开一篇文章记录下自己刷题的历程以及每道题的核心思路。

数组类:

(1)首先是leetcode 75题颜色分类

题目描述如下:

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

示例:

输入: [2,0,2,1,1,0]

输出: [0,0,1,1,2,2]

方法一:基于计数排序的方法

核心思路:遍历一次分别记录0,1,2的个数,之后重新构建一个新的数组

class Solution(object):

def sortColors(self, nums):

o = 0

p = 0

q = 0

for i in range(len(nums)):

if nums[i] == 0:

o = o+1

if nums[i] == 1:

p = p+1

if nums[i] == 2:

q = q+1

for j in range(0,o):

nums[j] = 0

for j in range(o,o+p):

nums[j] = 1

for j in range(o+p,len(nums)):

nums[j] = 2

方法二:基于三路快排的思想(我没想出来)

核心思路:

使用一次扫描的办法。

设立三根指针,left, index, right。定义如下规则:left 的左侧都是 0(不含 left)

right 的右侧都是 2(不含 right)

index 从左到右扫描每个数,如果碰到 0 就丢给 left,碰到 2 就丢给 right。碰到 1 就跳过不管

class Solution:

"""

@param nums: A list of integer which is 0, 1 or 2

@return: nothing

"""

def sortColors(self, A):

left, index, right = 0, 0, len(A) - 1

# be careful, index < right is not correct

while index <= right:

if A[index] == 0:

A[left], A[index] = A[index], A[left]

left += 1

index += 1

elif A[index] == 1:

index += 1

else:

A[right], A[index] = A[index], A[right]

right -= 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值