2024.5.8 —— LeetCode 高频题复盘

目录

  • 检测循环依赖
  • 7. 整数反转
  • LCR 170. 交易逆序对的总数
  • 55. 跳跃游戏
  • 45. 二叉树的后序遍历
  • 50. Pow(x, n)
  • 40. 组合总和 II
  • 74. 搜索二维矩阵
  • 26. 删除有序数组中的重复项
  • 61. 旋转链表

检测循环依赖


题目链接

def haveCircularDependency(self, n: int, prerequisites):g = [[]for i in range(n)] #邻接表存储图结构indeg = [0 for i in range(n)] #每个点的入度res = [] #存储结果序列q = deque()#将依赖关系加入邻接表中g,并各个点入度for pre in prerequisites:a, b = pre[0], pre[1]g[a].append(b)indeg[b] += 1#一次性将入度为0的点全部入队for i in range(n):if indeg[i] == 0:q.append(i)while q:t = q.popleft()res.append(t)#删除边时,将终点的入度-1。若入度为0,果断入队for j in g[t]:indeg[j] -= 1if indeg[j] == 0:q.append(j)if len(res) == n:return reselse:return []

类似题目 207. 课程表、210. 课程表 II

7. 整数反转


题目链接

class Solution:def reverse(self, x: int) -> int:sx=str(x)if sx[0]!="-":xx=int(sx[::-1])else:xx=int(sx[:0:-1])xx=-xxreturn xx if -2**31<=xx<=2**31-1 else 0

LCR 170. 交易逆序对的总数


题目链接

归并排序。

class Solution:# nums中逆序对的个数等于左半部分逆序对个数+右半部分逆序对个数+跨左右两部分逆序对个数def merge(self,left,right):merged=[]i,j=0,0count=0while i<len(left) and j<len(right):if left[i]<=right[j]:merged.append(left[i])i+=1else:merged.append(right[j])j+=1# 说明 left[i] 及其后面的所有元素都大于 right[j]count+=len(left)-iwhile i<len(left):merged.append(left[i])i+=1while j<len(right):merged.append(right[j])j+=1return merged,countdef merge_sort(self,nums):if len(nums)<=1:return nums,0mid=len(nums)//2left,count_left=self.merge_sort(nums[:mid])right,count_right=self.merge_sort(nums[mid:])merged,count_merge=self.merge(left,right)return merged,count_merge+count_left+count_rightdef reversePairs(self, nums: List[int]) -> int:return self.merge_sort(nums)[1]

55. 跳跃游戏


题目链接

class Solution:def canJump(self, nums: List[int]) -> bool:if len(nums)==1:return Truei,cover=0,0while i<=cover:cover=max(i+nums[i],cover)if cover>=len(nums)-1:return Truei+=1return False

45. 二叉树的后序遍历


题目链接

递归

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:lis=[]def traversal(root):if not root:returntraversal(root.left)traversal(root.right)lis.append(root.val)traversal(root)return lis

非递归

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:WHITE,GRAY=0,1 # 新节点为白色,已访问过的节点为灰色res = []stack = [(WHITE, root)]while stack:color, node = stack.pop()if node is None: continue# 如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身、左子节点依次入栈。if color == WHITE: stack.append((GRAY, node))stack.append((WHITE, node.right))stack.append((WHITE, node.left))# 如果遇到的节点为灰色,则将节点的值输出。else:res.append(node.val)return res

50. Pow(x, n)


题目链接

class Solution:def myPow(self, x: float, n: int) -> float:# 快速幂if x==0.0:return 0.0if n<0:x,n=1/x,-nres=1while n:if n&1:res*=xx*=xn>>=1return res

40. 组合总和 II


题目链接

class Solution:def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:path=[]res=[]def backtracking(candidates,target,s,startIndex):if s>target:returnif s==target:res.append(path[:])return resfor i in range(startIndex,len(candidates)):# 关键if i>startIndex and candidates[i]==candidates[i-1] and used[i-1]==False:continues+=candidates[i]path.append(candidates[i])used[i]=Truebacktracking(candidates,target,s,i+1)s-=candidates[i]path.pop()used[i]=Falsecandidates.sort()used=[False]*len(candidates)backtracking(candidates,target,0,0)return res

74. 搜索二维矩阵


题目链接

class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:# 二维数组从左往右递增,从上往下递增# 故想到以二维数组左下角为原点,建立直角坐标轴m,n=len(matrix),len(matrix[0])i,j=m-1,0while i>=0 and j<n:if target>matrix[i][j]:j+=1elif target<matrix[i][j]:i-=1else:return Truereturn False

26. 删除有序数组中的重复项


题目链接

class Solution:def removeDuplicates(self, nums: List[int]) -> int:i=0for num in nums:if i==0 or nums[i-1]!=num:nums[i]=numi+=1return i

类似题目 27. 移除元素

61. 旋转链表


题目链接

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:if not head:return Nonen=1cur=headwhile cur.next:n+=1cur=cur.nextcur.next=head # 成环for _ in range(n-k%n):cur=cur.nextnewHead=cur.nextcur.next=Nonereturn newHead

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

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

相关文章

MATLAB实现遗传算法优化选址-路径LRP问题(Location-Routing Problem)

MATLAB实现遗传算法优化选址-路径LRP问题(Location-Routing Problem) 一、模型 选址车辆路径问题&#xff08;Location-Routing Problem, LRP&#xff09;是一个组合优化问题&#xff0c;旨在同时优化设施位置的选择和车辆的配送路径。在这个问题中&#xff0c;我们考虑一个由…

机器学习 - 决策树

1. 决策树基础 定义与概念 决策树是一种监督学习算法&#xff0c;主要用于分类和回归任务。它通过学习从数据特征到输出标签的映射规则&#xff0c;构建一个树形结构。在分类问题中&#xff0c;决策树的每个叶节点代表一个类别。 案例分析 假设我们有一个关于天气和是否进行…

linux防火墙的操作

linux防火墙的操作 前言1查看防火墙状态2暂时关闭防火墙3永久关闭防火墙4开启防火墙5开启指定端口6关闭指定端口7立即生效8查看开放的端口前言 systemctl是管理linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作 firewall-cmd是linux中专门用于控制防火墙的…

并发-守护线程setDaemon()

目录 为什么存在 什么是守护线程 创建守护线程 在使用守护线程时需要注意以下几点 可以使用isDaemon()方法来检查线程是否是守护线程 例1&#xff1a;上面提到当JVM中只剩下守护线程的时候&#xff0c;JVM就会退出&#xff0c;那么写段代码测试下 例2&#xff1a;thread…

小红的字符串构造和小红的排列构造

小红的字符串构造 小红希望你构造一个长度为nnn的、仅包含小写字母的字符串&#xff0c;其中恰好有kkk个长度大于1的回文子串。你能帮帮她吗&#xff1f;输入两个整数n,k&#xff0c;用空格隔开。 1≤n≤10^5,0≤k≤n/2.一个字符串。如果有多解输出任意即可。 可以证明&#x…

[Bug]:由于中国防火墙,无法连接 huggingface.co

问题描述 : OSError: We couldnt connect to https://huggingface.co to load this file, couldnt find it in the cached files and it looks like youscan/ukr-roberta-base is not the path to a directory containing a file named config. Json. Checkout your internet …

[AIGC] 几道 redis数据结构相关面试题

文章目录 7. 数据类型的实现8. 什么是空间预分配以及惰性空间释放&#xff0c;SDS 是怎么实现的9. 为什么说 SDS 是二进制安全的呢10. 说说 redis 里的对象11. 使用 RedisObject 的好处12. RedisObject 的具体结构是什么 7. 数据类型的实现 8. 什么是空间预分配以及惰性空间释放…

Vue3实战笔记(16)—pinia基本用法--Getter

文章目录 前言一、pinia的getter简单理解二、访问其他 store 的 getter总结 前言 在 Pinia 中&#xff0c;getter 类似于 Vuex 中的 getter&#xff0c;允许你从 store 中派生出一些状态&#xff0c;而不需要修改原始状态。这使得我们可以创建基于现有状态的计算属性。 一、pi…

练习题(2024/5/12)

1二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…

树莓派C语言开发

安装C语言编译器和开发工具 sudo apt update sudo apt install build-essential 此命令会安装GCC编译器以及make等其他工具&#xff0c;这些都是C语言程序开发过程中必需的。 配置文本编辑器 树莓派默认安装了几个文本编辑器&#xff0c;如Nano和Vim。如果你对这些编辑器不熟…

如何远程访问?

远程访问是指在不同的地理位置之间通过网络连接来实现对目标设备或系统的访问。无论是在个人生活还是商业领域&#xff0c;远程访问都起到了重要的作用&#xff0c;帮助人们实现高效的工作和便捷的生活。本文将介绍一款名为【天联】的组网产品&#xff0c;它是一款强大的异地组…

Linux与Windows互传文件【笔记】

Linux与Windows互传文件【笔记】 前言前言推荐Linux与Windows互传文件首先确保Windows安装ssh如何传送文件问题 最后 前言 这是陈旧已久的草稿2023-05-10 00:01:24 这个是准备把计组课程华为智能计组的&#xff0c;传输文件。 最后发现&#xff0c;好像没有实现了。 现在202…

汽车线控转向系统介绍

汽车线控转向系统由方向盘总成、转向执行总成和主控制器(ECU)三个主要部分以及自动防故障系统、电源等辅助系统组成。 线控转向系统(Steering-By-Wire)&#xff0c;取消了方向盘和转向车轮之间的机械连接部件&#xff0c;彻底摆脱了机械固件的限制&#xff0c;完全由电能来实现…

【LeetCode】数组——hashmap的妙用

在遇到一类题目时&#xff0c;通过双for循环也可暴力破解&#xff0c;但我们可以通过用hashmap来代替一次for循环节约时间开支&#xff0c;在算法上属于用空间换时间&#xff0c;也能帮助我们更好的理解hashmap这一种重要数据结构&#xff0c;并熟悉hashmap的重要方法。 1.两数…

31Windows精简系统下载推荐

Windows精简系统下载推荐 世界上有很多人在做Windows精简系统&#xff0c;去掉了他们认为不必要的功能和插件&#xff0c;达到了减小系统安装包体积&#xff0c;提升系统运行流畅度和稳定性的目的。 笔者推荐使用大佬不忘初心制作的精简版系统&#xff0c;最精简windows10系统安…

什么是数据平台——企业构建Data+AI的基础数据底座需要的决策参考

什么是数据平台 标准的解释是这样的 Wikipedia A data platform usually refers to a software platform used for collecting and managing data, and acting as a data delivery point for application and reporting software. 数据平台是指将各类数据进行整合、存储、处…

你知道C++多少——默认成员函数

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

Python vs MATLAB:选择深度学习的首选编程语言

Python vs MATLAB&#xff1a;选择深度学习的首选编程语言 在深度学习领域&#xff0c;编程语言的选择对于初学者的学习路径和未来的职业发展至关重要。目前&#xff0c;Python和MATLAB都是进行科学计算和数据分析的流行工具&#xff0c;但它们在深度学习社区中的应用和受欢迎…

linux程序分析命令(一)

linux程序分析命令(一) **ldd&#xff1a;**用于打印共享库依赖。这个命令会显示出一个可执行文件所依赖的所有共享库&#xff08;动态链接库&#xff09;&#xff0c;这对于解决运行时库依赖问题非常有用。**nm&#xff1a;**用于列出对象文件的符号表。这个命令可以显示出定…

什么事防抖和节流,有什么区别,如何实现

防抖和节流&#xff0c;本质上是优化高频率执行代码的一种手段&#xff0c;比如&#xff1a;resize、scroll、keypress、mousemove这些事件在触发的时候&#xff0c;会不断调用绑定在事件上的回调函数&#xff0c;这样极大浪费资源&#xff0c;降低前端性能。 为了优化体验&am…