丁丁的Python学习笔记
丁lingling哇
这个作者很懒,什么都没留下…
展开
-
leetcode 117. 填充每个节点的下一个右侧节点指针 II
leetcode117. 填充每个节点的下一个右侧节点指针 II原创 2023-02-28 18:07:53 · 83 阅读 · 0 评论 -
leetcode16. 最接近的三数之和
leetcode16刷题笔记原创 2023-02-23 15:18:59 · 504 阅读 · 0 评论 -
leetcode1456. 定长子串中元音的最大数目
leetcode1456. 定长子串中元音的最大数目原创 2022-12-30 16:25:21 · 688 阅读 · 0 评论 -
leetcode264 丑数 II
leetcode学习笔记原创 2022-11-27 15:33:23 · 261 阅读 · 0 评论 -
牛客 DP61 串(python)
长度不超过nn,且包含子序列“us”的、只由小写字母构成的字符串有多少个? 答案对10^9+7109 +7取模。所谓子序列,指一个字符串删除部分字符(也可以不删)得到的字符串。例如,“unoacscc"包含子序列"us”,但"scscucu"则不包含子序列"us"输入描述: 一个正整数n输出描述: 一个正整数,为满足条件的字符串数量对10^9+7取模的值此题只要能够写出状态转移方程就比较好写了如果没有及时取余的话会导致超时所以要在每次迭代的时候就及时做取余操作状态中有三个参数:f[原创 2022-05-12 21:39:26 · 835 阅读 · 0 评论 -
牛客 打家劫舍(三)(python)
你是一个经验丰富的小偷,经过上次在街边和湖边得手后你准备挑战一次自己,你发现了一个结构如二叉树的小区,小区内每个房间都存有一定现金,你观察到除了小区入口的房间以外每个房间都有且仅有一个父房间和至多两个子房间。问,给定一个二叉树结构的小区,如之前两次行动一样,你无法在不触动警报的情况下同时偷窃两个相邻的房间,在不触动警报的情况下最多的偷窃金额。1.如果输入的二叉树是52 1 2 2 10 1 1 2 3那么形状结构如下:小区入口的房间的值是2 ,偷窃第一层2和第三层 2,1 是最优方案。原创 2022-05-11 21:14:30 · 1080 阅读 · 0 评论 -
leetcode215 数组中的第K个最大元素(python)快速排序法
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4这题我用了快速排序的方法做的不过耗时还是有些长class Solution: def findKthLargest(self, nums: List[int], k: in原创 2022-04-20 09:58:48 · 949 阅读 · 0 评论 -
leetcode 630 课程表 III(python)
这里有 n 门不同的在线课程,按从 1 到 n 编号。给你一个数组 courses ,其中 courses[i] = [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课,并且必须在不晚于 lastDayi 的时候完成。你的学期从第 1 天开始。且不能同时修读两门及两门以上的课程。返回你最多可以修读的课程数目。该问题实现起来不难主要是需要理清楚题目的思路需要一直动态地更新选择的课程更新的标准就是将耗时长的课程删去补上耗时短的课程class原创 2022-04-14 22:17:46 · 512 阅读 · 0 评论 -
leetcode 407 接雨水 II
给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。该问题与原二维问题的差距还是挺大的需要借鉴dijkstra算法的思想python中使用堆队列结构能够较好地实现这个问题从每次高度最小的点附近开始搜索判断其附近的点是否能接到雨滴class Solution: def trapRainWater(self, heightMap: List[List[int]]) -> int: if not hei原创 2022-04-13 16:46:53 · 143 阅读 · 0 评论 -
leetcode 42 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9暴力最值自己写的方法比较暴露使用两个数组记录点i左右的最大值leftmax和r原创 2022-04-13 15:27:15 · 129 阅读 · 0 评论 -
leetcode 239 滑动窗口最大值(python)
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: length = len(nums) if length < 2 or k < 2:return原创 2022-04-12 16:41:55 · 1186 阅读 · 0 评论 -
leecode 207&210 课程表
leecode 207 课程表你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false原创 2022-04-08 23:01:53 · 591 阅读 · 0 评论 -
leetcode 46&47 全排列
不含重复数字的全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]递归思路class Solution: def permute(self, nums: List[int]) -> List[List原创 2022-04-08 11:09:06 · 116 阅读 · 0 评论 -
leetcode 22 括号生成(python)
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]示例 2:输入:n = 1输出:[“()”]动态规划(深度优先算法)使用二叉树模型深度搜索可行的括号组合停止搜索的条件是括号个数=n或者右括号的个数多于左括号个数,即括号无效class Solution: def generateParenthesis(原创 2022-04-08 00:31:15 · 528 阅读 · 0 评论 -
leetcode 32 最长有效括号(python)
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2:输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”该问题有多种方法可以进行求解首先使用的是贪心算法计算左括号和右括号的关系如果右括号的个数大于左括号的个数,就不是有效的括号,需要重新归零计算该方法需要从左向右,再从右向左计算一次,才能历遍所有的可能性因为两个方向的历遍原创 2022-04-07 21:51:41 · 717 阅读 · 0 评论 -
牛客 地下迷宫(python)
小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径)。小青蛙在迷宫中水平移动一个单位距离需要消耗1点体力值,向上爬一个单位距离需要消耗3个单位的体力值,向下移动不消耗体力值,当小青蛙的体力值等于0的时候还没原创 2022-04-06 23:49:21 · 301 阅读 · 0 评论 -
牛客BM85 验证IP地址(python)
编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255,用(“.”)分割。比如,172.16.254.1同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01是不合法的。IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (“:”)分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。原创 2022-04-06 11:57:24 · 222 阅读 · 0 评论 -
leetcode 846 一手顺子(python)
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize ,并且由 groupSize 张连续的牌组成。给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。示例 1:输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3输出:true解释:Alice 手中的牌可以被重新排列为 [1,2,3],[2,3原创 2022-04-05 16:08:55 · 338 阅读 · 0 评论 -
leetcode 652 寻找重复的子树(python)
给定一棵二叉树 root,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵树具有相同的结构和相同的结点值,则它们是重复的。示例1输入:root = [1,2,3,4,null,2,4,null,null,4] 输出:[[2,4],[4]]由于题目要求我们把所有的重复子树都找出来 那么重复子树的子树也应该在其中 所以我们应该从叶子节点开始找起因此使用后序查找方式是更为合适的为了标记唯一的树类型 对于None的子节点 我们需要用一个特殊符号“#原创 2022-04-05 15:16:51 · 981 阅读 · 0 评论 -
[算法笔试题]华为相关复习题(更新中)
算法笔试题 华为相关复习题leecode 698. 划分为k个相等的子集题目链接:划分为k个相等的子集使用概念:回溯+剪枝原创 2022-04-05 00:15:22 · 3800 阅读 · 0 评论 -
leetcode 79 单词搜索(python)
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],word = “ABCCED”输出:true使用深度优先+回溯方法原创 2022-04-05 00:13:01 · 179 阅读 · 0 评论 -
leetcode 347 前 K 个高频元素(python)
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]因为用的是python直接调用sort函数的话就会比较快如果不用sort的话需要写一个排序函数class Solution: def topKFrequent(self, nums: List[int],原创 2022-04-04 22:12:57 · 967 阅读 · 0 评论 -
leetcode 698 划分为k个相等的子集(python)
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4个子集(5),(1,4),(2,3),(2,3)等于总和。示例 2:输入: nums = [1,2,3,4], k = 3输出: false该问题python不剪枝的话会超时主要使用了回溯+剪枝的思想疯狂试错每次把元素放到每一个篮子里面试试看原创 2022-04-04 21:31:13 · 489 阅读 · 0 评论 -
剑指 Offer 53 - I 在排序数组中查找数字 I(python)
统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2该问题不能简单地使用二分法因为我们返回的不是一个单一的位置应该找到一段连续的目标因此需要使用两次二分法寻找边界以下代码减少的代码的冗余使用两次有边界查找方法寻找区间class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]:原创 2022-03-30 01:08:54 · 920 阅读 · 0 评论 -
剑指 Offer 57 - II 和为s的连续正数序列(python)
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]自己用的是二分法class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: max_num = (target+1)//2原创 2022-03-26 01:17:20 · 950 阅读 · 0 评论 -
剑指 Offer 28 对称的二叉树(python)
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。这个是我自己完成的代码主要比较了以下几种情况左右子结点为None为对称左右子结点一个为None另一个不是None为不对称对比左子结点的左子节点和右子结点的右子节点(由于对称性)对比左子结点的右子节点和右子结点的左子节点(由于对称性)对比对称的点上的值是否相等# Definition for a binary tree node.# class TreeNode:# def __in原创 2022-03-22 21:16:41 · 815 阅读 · 0 评论 -
剑指 Offer 54 二叉搜索树的第k大节点(python)
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。该题本身比较好理解但是具体的代码实现还是有一定的技巧的结合二叉搜索树的特点我们以右-根-左顺序来搜索最大值# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass So原创 2022-03-22 20:10:41 · 1048 阅读 · 0 评论 -
剑指 Offer 37 序列化二叉树(python)
请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。输入:root = [1,2,3,null,null,4,5]输出:[1,2,3,null,null转载 2022-03-22 15:47:12 · 140 阅读 · 0 评论 -
剑指 Offer 46 把数字翻译成字符串(python)
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258 输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”,“mcfi"和"mzi”使用动态规划思想即可该题思路和爬楼梯是一样的class Solution: def translateN原创 2022-03-20 15:27:28 · 595 阅读 · 0 评论 -
leetcode 题目33 搜索旋转排序数组(python)
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数 ta原创 2022-03-07 11:31:06 · 181 阅读 · 0 评论 -
leecode 题目46 全排列(python)
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 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解释: 节点原创 2022-03-04 20:39:22 · 96 阅读 · 0 评论 -
leecode 题目89 格雷编码(python)
n 位格雷码序列 是一个由 2n 个整数组成的序列,其中:每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)第一个整数是 0一个整数在序列中出现 不超过一次每对 相邻 整数的二进制表示 恰好一位不同 ,且第一个 和 最后一个 整数的二进制表示 恰好一位不同给你一个整数 n ,返回任一有效的 n 位格雷码序列 。示例 1:输入:n = 2输出:[0,1,3,2]解释: [0,1,3,2] 的二进制表示是 [00,01,11,10] 。00 和 01 有一位不同原创 2022-03-04 16:36:30 · 285 阅读 · 0 评论 -
leecode 题目46 全排列(python)
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]该代码中主要的关键就是使用了递归和enumerateenumerate功能如下:对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值class Solution:原创 2022-03-04 09:53:14 · 480 阅读 · 0 评论 -
leecode 题目148 排序链表(python)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]主要学习了评论区和B站上的代码直接排序的话问题耗时过大因此使用快指针和慢指针把链表切成两条先把两个链表排序然后再逐一对比两个链表的内容连接在一起# Definition for singly-linked list.# class ListNod原创 2022-03-02 11:54:24 · 423 阅读 · 0 评论 -
leecode 题目92 反转链表 II(python)
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]# Definition for singly-linked list.# clas原创 2022-03-01 20:58:43 · 552 阅读 · 0 评论 -
meituan-001. 小美的用户名
meituan-001. 小美的用户名小美是美团的前端工程师,为了防止系统被恶意攻击,小美必须要在用户输入用户名之前做一个合法性检查,一个合法的用户名必须满足以下几个要求:用户名的首字符必须是大写或者小写字母。用户名只能包含大小写字母,数字。用户名需要包含至少一个字母和一个数字。如果用户名合法,请输出“Accept”,反之输出 “Wrong”。格式:输入:输入第一行包含一个正整数 T,表示需要检验的用户名数量。接下来有 T 行,每行一个字符串 s,表示输入的用户名。输出:对于每原创 2022-02-28 21:14:56 · 252 阅读 · 0 评论 -
leecode 题目15 三数之和(python)
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]该代码是在B站up主Michelle小梦想家介绍的算法之下进行修改的方法c原创 2022-02-28 20:40:56 · 209 阅读 · 0 评论 -
leecode 题目572 另一棵树的子树(python)
给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4,5,1,2,null,null,null,null,原创 2022-02-28 18:55:13 · 358 阅读 · 0 评论 -
leecode 题目62 不同路径(python)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下 -> 向右原创 2022-02-28 17:10:13 · 390 阅读 · 0 评论 -
leecode 题目59 螺旋矩阵 II(python)
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]参考bilibili写出的代码:class Solution: def generateMatrix(self, n: int) -> List[List[int]]: rowBegin,rowEnd =转载 2022-02-26 23:26:30 · 104 阅读 · 0 评论