python leetcode_leetcode 刷题经验,主力 python

1. 树的先序遍历可以求高度,后序遍历可以求深度。

剑指 Offer 55 - II. 平衡二叉树​leetcode-cn.com

2. 二叉搜索树的中序遍历可以递增地返回所有元素。逆序的中序遍历(即先右子节点,再根节点,再左子节点)可以递减的返回所有元素。

3. python 的字典就是非常好的哈希工具。get 方法可以写参数当默认值,常用计数 dic.get(ch, 0) + 1

4. 求质数比较快的方法 ,筛法

isPrime = [True] * (n + 1) # 1, 2, ..., nisPrime[1] = Falseidx = 2while idx <= n:if isPrime[idx]:i = idxwhile idx * i <= n:isPrime[idx * i] = Falsei += 1idx += 1

5. python 快速排序实现可以更简洁,思路更清楚

class Solution:def quickSort(self, A, left, right):if left < right:pos = self.partition(A, left, right)self.quickSort(A, left, pos-1)self.quickSort(A, pos+1, right)def partition(self, A, left, right):i, j = left, rightwhile i < j:while i < j and A[j] >= A[left]: j -= 1while i < j and A[i] <= A[left]: i += 1A[i], A[j] = A[j], A[i]A[i], A[left] = A[left], A[i]return i

6. python 归并排序

"""
def mergeSort(A, left, right):pass
def merge(A, left, mid, right): [left, mid] [mid+1, right]pass观察最外层递归
[3, 2, 4, 5, 7, 1, 9]0  1  2  3  4  5  6    left = 0 right = 6, mid = 3, mergeSort(A, 0, 3), mergeSort(A, 4, 6) merge(A, left = 0, mid = 3,  right = 6)[2, 3, 4, 5, 1, 7, 9]0  1  2  3  4  5  6    A[left], ..., A[mid] 序列 和 A[mid+1], ..., A[right]观察最内层递归
mergeSort(A, left = 2, right = 3):if left < right: Truemid = 2mergeSort(A, left = 2, mid = 2)mergeSort(A, left = mid + 1 = 3, right = 3)merge(A, left = 2, mid = 2, right = 3)
"""def mergeSort(A, left, right):if left < right:mid = (left + right) // 2mergeSort(A, left, mid)mergeSort(A, mid+1, right)merge(A, left, mid, right)def merge(A, left, mid, right):i, j = left, mid + 1 # 合并 A[left], ..., A[mid] 序列 和 A[mid+1], ..., A[right] 序列temp = []while i <= mid and j <= right:if A[i] <= A[j]:temp.append(A[i])i += 1else:temp.append(A[j])j += 1while i <= mid:temp.append(A[i])i += 1while j <= right:temp.append(A[j])j += 1for i in range(len(temp)):A[left+i] = temp[i]L = [4,2,1,5,3,2,1]
mergeSort(L, 0, len(L)-1)

7. python oj 处理标准输入 What does Python's eval() do?

  • 示例1
输入: ["flower","flow","flight"]
输出: "fl"
>>> L = list(map(lambda x: x.strip('"'), input().strip('[]').split(',')))
>? ["flower","flow","flight"]
>>> L
>>> ['flower', 'flow', 'flight']
  • 示例2
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
>>> L = eval(input())
>? [[1,3],[2,6],[8,10],[15,18]]
>>> L
>>> [[1, 3], [2, 6], [8, 10], [15, 18]]

8. 二叉树遍历的迭代算法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
  • 前序遍历
class Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:res = []stack = []cur = rootwhile stack or cur:while cur:res.append(cur.val)stack.append(cur)cur = cur.lefttop = stack.pop()cur = top.rightreturn res
  • 后序遍历
class Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:res = []stack = []cur = rootwhile stack or cur:while cur:res.append(cur.val)stack.append(cur)cur = cur.righttop = stack.pop()cur = top.leftreturn res[::-1]
  • 中序遍历
class Solution:def inorderTraversal(self, root: TreeNode) -> List[int]:res = []stack = []cur = rootwhile stack or cur:while cur:stack.append(cur)cur = cur.lefttop = stack.pop() #此时左子树遍历完成res.append(top.val)  #将父节点加入列表cur = top.right #遍历右子树return res

9. BFS

v2-97599b656ee9918bc7ba198f5739739d_b.jpg
import collections
graph = {"A": ["B", "C"],"B": ["A", "C", "D"],"C": ["A", "B", "D", "E"],"D": ["B", "C", "E", "F"],"E": ["C", "D"],"F": ["D"]
}# 最初版本 BFS
def BFS(graph, s):queue = collections.deque()queue.append(s)seen = set()seen.add(s)while queue:vertex = queue.popleft()nodes = graph[vertex]for w in nodes:if w not in seen:queue.append(w)seen.add(w)print(vertex)BFS(graph, "A") # ABCDEF
print('---------------')# DFS 迭代实现
def DFS(graph, s):stack = []stack.append(s)seen = set()seen.add(s)while stack:vertex = stack.pop()nodes = graph[vertex]for w in nodes:if w not in seen:stack.append(w)seen.add(w)print(vertex)
DFS(graph, "A") # ACEDFB# BFS 打印路径
def BFS(graph, s):queue = collections.deque()queue.append(s)seen = set()seen.add(s)parent = {s: None}while queue:vertex = queue.popleft()nodes = graph[vertex]for w in nodes:if w not in seen:queue.append(w)seen.add(w)parent[w] = vertex# print(vertex)return parentparent = BFS(graph, "A")
v = 'F'
while v != None:print(v)v = parent[v]
# F D B A

10. 并查集

# 对于一维输入
# https://leetcode-cn.com/problems/paths-with-sum-lcci/
class UF:def __init__(self, n):self.rank = [0 for _ in range(n)] # 代表树的高度,用来将树平衡self.up = [i for i in range(n)]def find(self, x):if self.up[x] == x:return xelse:self.up[x] = self.find(self.up[x])return self.up[x]def union(self, x1, x2):r1 = self.find(x1)r2 = self.find(x2)if r1 == r2:returnif self.rank[r1] == self.rank[r2]:self.rank[r1] += 1self.up[r2] = r1elif self.rank[r1] > self.rank[r2]:self.up[r2] = r1else:self.up[r1] = r2
# 对于二维输入
# https://leetcode-cn.com/problems/number-of-islands/
class UnionFind:def __init__(self, grid: List[List[str]]):m, n = len(grid), len(grid[0])self.count = 0self.parent = [-1] * (m * n)self.rank = [0] * (m * n)for i in range(m):for j in range(n):if grid[i][j] == "1":self.parent[i * n + j] = i * n + jdef find(self, i):if self.parent[i] != i:self.parent[i] = self.find(self.parent[i])return self.parent[i]def union(self, x, y):rootx = self.find(x)rooty = self.find(y)if rootx != rooty:if self.rank[rootx] < self.rank[rooty]:rootx, rooty = rooty, rootxself.parent[rooty] = rootxif self.rank[rootx] == self.rank[rooty]:self.rank[rootx] += 1

11. DFS中序遍历树结构并时刻比较先后访问的节点。

注意在什么位置更新上一个访问的节点 preNode。就是什么时候按照中序遍历,中间访问到了新的值,什么时候更新。

# https://leetcode-cn.com/problems/recover-binary-search-tree/solution/zhong-xu-bian-li-by-powcai/ 
# 恢复二叉树
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def __init__():self.preNode = Nonedef InOrderTravalsal(root):if not root:returnInOrderTravalsal(root.left)# 把 root.val 和 self.pre.val 进行一些比较# ...# 就在这更新刚刚 preNode. 因为访问下一个节点也一定是在递归函数的这个位置self.preNode = rootInOrderTravalsal(root.right)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

普及几个小常识,新手技能补充

一&#xff0c;如何设置门户或者论坛为首页&#xff1f;后台界面》导航管理&#xff0c;看向每个导航的最后面&#xff0c;有选择是否设置为首页&#xff0c;选中的即为打开之后的首页。二&#xff0c;如何添加二级导航&#xff0c;后台界面》导航管理&#xff0c;添加二级导航…

sqlldr 导入乱码,Oracle客户端字符集问题

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;查Oracle数据库创建时候的字符集&#xff1a; Oracle服务器端执行 SQL> select name, value$ from sys.props$ where name like NLS%; NAME VALUE$ ------------------------------ -------------------…

全国计算机等级考试题库二级C操作题100套(第53套)

第53套&#xff1a; 函数fun的功能是&#xff1a;计算请在程序的下划线处填入正确的内容并把下划线删除&#xff0c;使程序得出正确的结果。 注意&#xff1a;源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行&#xff0c;也不得更改程序的结构&#xff01; 给定源程序…

python中hashmap的方法_如何为Java的HashMap模拟Python的dict的“ items(...

我知道我应该学习如何使用Java进行高效编程,而不再认为它是Python.但是问题在于,这种事情在Java中变成了一场噩梦. 我在Python中具有以下函数,该函数将字符串作为参数&#xff1a; def decodeL(input): L [] for i in range(len(input)): for j in x.items(): // Where "…

Python在mysql中进行操作是十分容易和简洁的

首先声明一下&#xff0c;我用的是Windows系统&#xff01; 1、在Python中对mysql数据库进行操作首先要导入pymysql模块&#xff0c;默认情况下&#xff0c;Python中是没有安装这个模块的&#xff0c; 可以在Windows的命令行中用pip install pymysql来安装&#xff08;注意要连…

讲php fpm的书,细说PHP-fpm

最近在研究PHP的源码&#xff0c;有时候会延伸到很多东西。这里就专程找了下php-fpm的内容学习下。是什么&#xff1f;在理解php-fpm之前&#xff0c;我们要先搞清楚几个关键词以及他们之间的关系:CGIFastCGIphp-fpmphp-cgi.CGI:(Common Gateway Interface)&#xff0c;即通用网…

J2SE综合对java util的总结 一

J2SE综合对java util的总结 一 java.util包中包含了一些在Java 2中新增加的最令人兴奋的增强功能&#xff1a;类集。一个类集&#xff08;collection&#xff09;是一组对象。类集的增加使得许多java.util中的成员在结构和体系结构上发生根本的改变。它也扩展了包可以被应用的任…

全国计算机等级考试题库二级C操作题100套(第54套)

第54套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除&#xff0c;使程序得出正确的结果。 注意&#xff1a;源程序存放在考生文件夹下的BLANK1.C中…

安卓微软雅黑字体ttf_618巨献丨精致的悦黑5字重小字体

悦黑字体简介去年双十一当天&#xff0c;小编应大家要求&#xff0c;分享了一款悦黑小字体&#xff0c;苹果和安卓都有&#xff1a;双十一巨献&#xff1a;令人瑟瑟发抖的5字重悦黑小字体大半年时间过去了&#xff0c;一直没有更新&#xff0c;今天抽空更新一下。悦黑是由造字工…

全国计算机等级考试题库二级C操作题100套(第55套)

第55套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;判断形参s所指字符串是否是"回文" &#xff08;Palindrome&#xff09;&#xff0c;若是&#xff0c;函数返回值为1&#xff1b;不是&#xff0c;函数返回值为0。“回文” 是正读和反读都一样…

面试的问题 及回答

1、Postmessage 与 SendMessage的区别 PostMessage该函数将一个消息放入&#xff08;寄送&#xff09;到与指定窗口创建的线程相联系消息队列里&#xff0c;不等待线程处理消息就返回&#xff0c;是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得 SendMes…

伪静态隐藏域名后缀_你想知道的动态URL、静态URl、伪静态URL概念及区别都在这里!...

【小宅按】我们说url的动态、静态、伪静态三种形式&#xff0c;其实从严格分类上来说&#xff0c;伪静态也是动态的一种&#xff0c;只是表现形式为静态。参考&#xff1a;动态url、静态url和伪静态url的详细讲解 - 好文分享动态URl动态页面的特征1、以ASP、PHP、JSP、ASP.NET …

700多位老人的“智慧”养老记

“智慧”养老&#xff0c;受益的不只是居住养老公寓的老年人&#xff0c;养老机构本身也受益匪浅。 2012年12月&#xff0c;由汇晨养老公司机构管理有限公司(简称汇晨养老公司)与NEC中国共同开发的智能老年公寓信息化系统投入运行&#xff0c;生活在北京昌平区北七家汇晨老年公…

java清理语句,java – 如何在不使用准备语句的情况下对SQL进行清理

对,准备好的语句查询参数只能在您使用单个文字值的地方使用.您不能对表名,列名,值列表或任何其他SQL语法使用参数.所以你必须将你的应用程序变量插入到SQL字符串中,并引用相应的字符串.请使用引号来定界您的表名标识符,并将引号字符串加倍排列&#xff1a;java.sql.DatabaseMet…

【NOIP模拟】图论题Graph

题面 n点2n-2条有向边&#xff0c;数据先给一颗1为根的生成树边集&#xff0c;边目录按两部分给出 1、 开始的 n-1 条边描述了一颗以 1 号点为根的生成树&#xff0c;即每个点都可以由 1 号点 到达。 2、 接下来的 N-1 条边&#xff0c;一定是从 i 到 1&#xff08;2<i<N…

全国计算机等级考试题库二级C操作题100套(第56套)

第56套&#xff1a; 给定程序的功能是&#xff1a;从键盘输入若干行文本&#xff08;每行不超过80个字符&#xff09;&#xff0c;写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现…

docker 安装nginx_docker安装nginx搭建简单文件共享服务

使用nginx开启目录浏览功能&#xff0c;实现简单的http文件共享服务。一、 首先拉取nginx镜像&#xff0c;我使用的是arm32v7/nginx镜像。docker pull arm32v7/nginx二、运行一个临时的nginx实例&#xff0c;复制容器内的nginx.conf配置文件到主机上docker run --name tmp-ngin…

java _web之Servlet简单应用

Servlet是一种独立于平台和协议的服务器端的Java应用程序&#xff0c;可以生成动态的web页面。它担当Web浏览器或其他http客户程序发出请求、与http服务器上的数据库或应用程序之间交互的中间层。 所谓动态网页&#xff0c;就是在不同时刻或不同条件下访问Web服务器上的同一个页…

BZOJ4516: [Sdoi2016]生成魔咒

BZOJ4516: [Sdoi2016]生成魔咒 Description 魔咒串由许多魔咒字符组成&#xff0c;魔咒字符可以用数字表示。例如可以将魔咒字符 1、2 拼凑起来形成一个魔咒串 [1,2]。一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒。例如 S[1,2,1] 时&#xff0c;它的生成魔咒有 [1]、[2]…

matlab画泡面图,MATLAB中,( )函数可以保存图像并指定为图像文件格式。

The word "tunnel visioned "(Para 3, Line 2) most probably means______ .[解析] 男&#xff1a;简直不敢相信&#xff0c;我通过了所有考试。 女&#xff1a;被我说中了吧&#xff0c;看看你前几天&#xff0c;不是晚上失眠就是白天在屋子里走来走去的&#xff0c…