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,一经查实,立即删除!

相关文章

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

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

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;即通用网…

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

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

伪静态隐藏域名后缀_你想知道的动态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;生活在北京昌平区北七家汇晨老年公…

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服务器上的同一个页…

mysql redis hbase_MySQL之基本介绍

MySQL基本介绍在学习任何一款编程语言的过程中&#xff0c;我们会发现如果我们想要存储一些数据到本地硬盘的时候无疑是有些麻烦的。今天&#xff0c;我们就学一个和储存数据有关的数据库管理系统——MySQL。为啥要学会使用数据库呢&#xff1f;因为数据库可以方便的将数据存放…

linux mysql 修改root密码_Mac下重置mysql的root密码

php中文网最新课程每日17点准时技术干货分享我的mysql版本 MYSQL V5.7.9&#xff0c;旧版本请使用&#xff1a;UPDATE mysql.user SET PasswordPASSWORD(新密码) WHERE Userroot;Mac OS X - 重置 MySQL Root密码密码太多记不住&#xff1f;&#xff1f;你是否忘记了Mac OS 的My…

DHCP option 150与option 66的区别

转载于:https://blog.51cto.com/jaymimijay/1150777

python期末知识点_史上最全的Python知识点整理之基本语法

一、程序的格式框架 1.缩进 缩进是指每行语句前的空白区域&#xff0c;用来表示Python程序间的包含和层次关系。 一般语句不需要缩进&#xff0c;顶行书写且不留空白。 当表示分支、循环、函数、类等含义&#xff0c;在if&#xff0c;while&#xff0c;for&#xff0c;def&…

php网页多个倒计时,怎么实现一个页面有多个倒计时同时进行

后台返回时间&#xff0c;一个页面中有多个表格每个表格中有一行用来显示后台给的时间&#xff0c;比如说后台给一号表格10分钟的倒计时时间&#xff0c;给2号表格15分钟的倒计时时间&#xff0c;那我要怎么做才能使得这两个倒计时都能进行&#xff1f;&#xff1f;我自己模拟了…

opencv在python环境下的安装_python环境下安装opencv库的方法

注意&#xff1a;安装opencv以前须要先安装numpy&#xff0c;matplotlib等python 1、安装方法windows 方法1、在线安装函数 1.先安装opencv-python测试 pip install opencv-python --userspa个人python版本是3.6.8&#xff0c;能够看到opencv安装的默认版本是 opencv_python-4.…

接口的创建及使用

接口是全局变量和公共的抽象方法集合。它也是一种定义数据类型的方式&#xff0c;与类相比 相同之处&#xff1a;都是成员变量和成员方法也可以形成继承关系。 不同之处&#xff1a;接口中的属性都是常量&#xff08;final&#xff09;接口中的方法是抽象方法&#xff08;没有方…

movielens推荐系统_基于内容推荐(二)

A content-based movie recommender system using MovieLens tags &#xff08;用标签构建一个简单的电影推荐系统&#xff09;现在有很多电影。如果没有某种推荐系统&#xff0c;您会担心&#xff0c;随着时间的流逝&#xff0c;用户可能会被他们不关心的电影所淹没。因此&…

HALCON 1D Measure 算子初识

基本上1D Measure都是建立一个ROI(region of interest&#xff0c;感兴趣区域)&#xff0c;然后在感兴趣区域提取出边界的测量。常见的ROI有矩形ROI和圆环ROI。 下图为一个矩形ROI&#xff0c;中间的Profile Line为横截线&#xff0c;Center是行和列的坐标&#xff0c;Phi指定了…

python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面&#xff0c;然后引入所谓的“mvc框架”。 一、设计登录界面 下面开始第一个话题&#xff0c;使用pycharm的 PyQt5 Designer 做一个简单的界面。 上一篇最后&#xff0c;在pycharm中配置了PyQt5 Designer 和 uic&#xf…

Ubuntu识别USB设备

参考&#xff1a;如何解决Ubuntu无法识别USB设备 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-28 21:02:00 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108286829 目录1、U盘识别2、识别转换解决Ubuntu无法识别USB3.0方法一&#xf…

解除单个文件的与svn服务器的关联

有些文件和个人开发环境有关不需要和svn服务器做同步&#xff0c;可以取消其和svn服务的关联。 右键选中要取消关联的文件&#xff0c;右键菜单 Tortoise SVN ---> unversion and add to ignore list 确定后&#xff0c;文件图标会变成一把小剪刀&#xff0c;说明已经…