楠君的小窝
LC.46. 全排列
解题思路 排列与组合不同的是排列是每个元素顺序不同就算一个新的排列,而组合是不管里面元素的顺序是怎样的。 [1,2,3] 与 [3,2,1]是不同的排列,但是它们是一样的组合 这题我们只需要知道每次遍历剩余哪些元素还没被添加,将其添加就行,唯一的难点就是怎么判断哪些元素没有被添加,我使用的是哈希表,通过记录下标来分辨哪些元素没有被添加。 代码 Python 1234567891011121314151617181920212223class Solution: def permute(self, nums: List[int]) -> List[List[int]]: n = len(nums) if n == 0: return [[]] ans = [] s = set() tmp = [] def dfs(): # nonlocal ans, s, tmp if len(tmp) == n: ...
LC17. 电话号码的字母组合
解题思路 就是遍历digits,然后将每种可能遍历一遍。 Go要注意,回溯要将数组定义在最外面,不然修改不到。 代码 Python 1234567891011121314151617class Solution: def letterCombinations(self, digits: str) -> List[str]: letter = {'2': "abc", '3': "def", '4': "ghi", '5': "jkl", '6': "mno", '7': "pqrs", '8': "tuv", '9': "wxyz"} answer = [] if not digits: ret ...
从0开始搭建可视化二叉树
需要使用到的知识 数据结构 图 二叉树,二叉搜索树 堆 算法 DFS BFS 数学 极角公式 勾股定理 库 Qt 框架 QGraphicsView QGraphicsItem QGraphicsScene 第一步,继承框架 大坑 QGraphicsItemAnimation 和 QTimeLine 这是个大坑啊,animation和timeLine在创建新节点的时候永远是同一个地址,也就是引用,并且animation的setItem每次都需要重新设置。 自定义widget样式表失效 … 不理解的地方 QPropertyAnimation无法在没有继承QObject的地方使用,但是经过我的使用发现,我的类及时继承了QObject也无法使用,必须在原来就有继承QObject的类才能使用。 1234567891011121314151617181920212223242526272829303132333435class MyArrowLine(QGraphicsPathItem, QObject): def __init__(self, startItem: QG ...
LC77. 组合
解题思路 这就是一道回溯题 首先我们要理解什么是组合,一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。,在这题中,我们的m<n,所以每次都要向后一位遍历,不能重复。 回溯的结束条件就是k == len(temp),我们要将temp添加进result temp是临时数组,result是最终要输出的数组 这里有一个剪枝,当剩下所有元素都无法与temp组合成新的组合时直接返回。 代码 Python 123456789101112131415class Solution: def combine(self, n: int, k: int) -> List[List[int]]: def backtracking(start, temp): if len(temp) == k: result.append(temp.copy()) return elif n - start + len(temp) < ...
经过7个月的努力,LC周赛终于稳定3题了
个人情况 题量突破500 在我磕磕绊绊下,终于将我的题量突破500了,皇天不负有心人,量变达成质变,我的coding水平突飞猛进,周赛第一和第二题我看一遍就能有思路,第三题30分钟内有思路,第四题能搏一搏。 很感谢三叶姐、灵神,西电爷还有雷锋,没有他们的帮助我走不到这一步。 雷锋是我的目标,他已经上guardian了,也是我偶然间认识的朋友,他今年也要参加蓝桥杯。 竞赛分达到1600 估计是比预测平台要高不少,距离Knight也只有200分了,努努力在2023年就能达到这个目标. 年度总结 先是在11月的时候收到LC的校园之星邀请,这很锻炼人。 12月的时候尝试实习,虽然没通过,听说差一点就过了。 12月的时候用QT和Excel做了一个出入库记录的project,虽然最后被我自己丢弃了。 12月的时候用QT和Excel还有MySQL做了一个学生管理系统,虽然这没有什么用。 12月,报名了蓝桥杯Python的C组。 1月尝试做一款游戏,失败了。 未来展望 奖项 蓝桥杯拿到国3,至少省1. 技术 做一款完整度高的项目。 精进C++和Python,偶尔学一下Go。 学业 4月考试全过吧 ...
LC108. 将有序数组转换为二叉搜索树
解题思路 就是一个函数,传入数组的左右边界,然后取数组的中间下标的值作为二叉树节点的值,不断递归就行 !!!注意,由于go的切片特性,其切片是不会对数组进行拷贝的所以不用额外创建一个函数。 代码 Python 1234567891011121314151617181920212223# 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 = rightclass Solution: def sortedArrayToBST(self, nums: List[int]) -> TreeNode: def helper(left, right): if left > right: return None ...
LC669. 修剪二叉搜索树
解题思路 与专题的删除节点类似,可以参考LC450 代码 Python 1234567891011121314151617181920# 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 = rightclass Solution: def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]: if not root: return None if root.val < low: return self.trimBST(root.right, low, high) ...
LC450. 删除二叉搜索树中的节点
解题思路 只需要分类讨论就行,根据不同情况进行不同的处理 节点为空:return root 节点==val: 左右不为空:将要删除的节点的左树连接到右树的最左节点的左 左为空,右不为空:return root.right 左不为空,右为空:return root.left 节点>val:说明val在当前节点的左子树中 节点<val:说明val在当前节点的右子树中 代码 Python 1234567891011121314151617181920212223# 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 = rightclass Solution: def deleteNode(self, root: Optional[TreeNode], key: in ...
LC701. 二叉搜索树中的插入操作
解题思路 因为是二叉搜索树(Binary search tree),整个树是有序的,我们根据val来调整自己下一个要遍历的节点,若下一个节点为为空,则创立新节点,将节点插入即可. 代码 Python 1234567891011121314151617181920# 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 = rightclass Solution: def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]: if root is None: return TreeNode(val) self.dfs(root, val) ...
LC1658. 将 x 减到 0 的最小操作数
题目 给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1 。 示例 1: 输入:nums = [1,1,4,2,3], x = 5 输出:2 解释:最佳解决方案是移除后两个元素,将 x 减到 0 。 示例 2: 输入:nums = [5,6,7,8,9], x = 4 输出:-1 示例 3: 输入:nums = [3,2,20,1,1,3], x = 10 输出:5 解释:最佳解决方案是移除后三个元素和前两个元素(总共 5 次操作),将 x 减到 0 。 提示: 1 <= nums.length <= 105 1 <= nums[i] <= 104 1 <= x <= 109 解题思路 首先正序遍历和逆序遍历一遍数组nums,将遍历到的每个元素累加保存进’leftSum’和’rightSum’中。 在累加元素的过程中我们可以判断一下是否有==x ...
LC235. 二叉搜索树的最近公共祖先
题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 输出: 6 解释: 节点 2 和节点 8 的最近公共祖先是 6。 示例 2: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4 输出: 2 解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。 解题思路 与二叉树专题的LC236的解法相同且代码相同
LC236. 二叉树的最近公共祖先
题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例 1: 输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出:3 解释:节点 5 和节点 1 的最近公共祖先是节点 3 。 示例 2: 输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出:5 解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。 示例 3: 输入:root = [1,2], p = 1, q = 2 输出:1 提示: 树中节点数目在范围 [2, 105] 内。 -109 <= Node.val <= 109 所有 Node.val 互不相同 。 p != q p 和 q 均存在于给定的二叉树中。 -109 < ...
avatar
🐟认真摸鱼中
楠君的小窝
Live is so good
前往小窝
公告栏
--- 主域名 ---
fomal.cc | fomal.cn
--- 备用域名 ---
netlify.fomal.cc
cloudflare.fomal.cc
--- 网站安卓APP ---
🍧点此下载🍧
小站资讯
文章数目 :
111
本站总字数 :
6.3w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面