编程题
包含LeetCode和一些常见编程题
小小草帽
Interests: 深度学习、图像理解,AR,VR(欢迎交流)
展开
-
Python已知二叉树后序和中序遍历数组求前序遍历
利用DFS解决树的遍历问题原创 2022-08-23 10:32:02 · 849 阅读 · 0 评论 -
求最大时间间隔
求24小时时间制的最大时间间隔。原创 2022-08-18 19:44:35 · 202 阅读 · 0 评论 -
岛屿的最大面积
Python解决岛屿的最大面积原创 2022-08-05 22:14:11 · 125 阅读 · 0 评论 -
最大层内元素和
广度优先搜索力扣题原创 2022-07-31 18:44:13 · 84 阅读 · 0 评论 -
【刷题】最小路径之和
矩阵求到达右下角最短路径值原创 2022-07-09 09:29:12 · 127 阅读 · 0 评论 -
接雨水问题解析
利用双指针解决接雨水问题记录原创 2022-07-04 16:38:20 · 113 阅读 · 0 评论 -
字符串相加
利用python在不直接转成数字的情况下,实现字符串相加。原创 2022-06-15 15:32:48 · 599 阅读 · 0 评论 -
求一个数可以由不同连续质数组合的个数
题目描述一个正数能被表示成一个或者多个连续质数的和。求不同表示的个数。例如41可以表示成2+3+5+7+11+13,11+13+17,41;三种素数组成的数列。方法先求取小于这个数的质数数列,然后利用滑动窗口一边扫描。寻找符合条件的数组的个数。def prime(n): """ 判断一个数是否为质数 :param n: int :return: bool """ if n <= 1: return False i原创 2022-05-30 09:37:09 · 254 阅读 · 0 评论 -
【LeetCode】回文子字符串的个数
题目描述给定一个字符串 s ,请计算这个字符串中有多少个回文子字符串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例示例 1:输入:s = “abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:s = “aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”方法:动态规划判断一个字符串是不是回文字符串,既要满足两点:确定两端的字符是否相等:s[i]==s[j]s[i原创 2022-05-05 21:35:34 · 2075 阅读 · 0 评论 -
【LeetCode】最长递增子序列
题目描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7原创 2022-05-04 15:59:39 · 469 阅读 · 0 评论 -
【LeetCode】最多删除一个字符得到回文
题目描述给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。示例示例 1:输入: s = “aba”输出: true示例 2:输入: s = “abca”输出: true解释: 可以删除 “c” 字符 或者 “b” 字符示例 3:输入: s = “abc”输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/RQku0D著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请原创 2022-05-03 16:28:45 · 1842 阅读 · 0 评论 -
【LeetCode】不含重复字符的最长子字符串
题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。示例示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子字符串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子字符串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的原创 2022-04-26 20:19:00 · 362 阅读 · 0 评论 -
【LeetCode】字符串中的变位词
题目描述给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例示例 1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例 2:输入: s1= “ab” s2 = “eidboaoo”输出: False来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/MPnai原创 2022-04-25 17:22:34 · 340 阅读 · 0 评论 -
Python判断一个数是否为质数
判断一个数是否为质数当进行质数判断的时候不需要判断到全部数字,只需要判断到平方根就可以了。因为如果一个数不是质数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于平方根,另一个小于或等于平方根,并且成对出现。class Solution: def prime(self, num): i = 2 while i * i <= num: if num % i == 0: return False原创 2022-04-25 16:21:14 · 3716 阅读 · 0 评论 -
背包问题刨析(Python代码)
例题某次漫展,已知有n个打卡点,每个打卡点的活动需要 m_i 分钟完成,完成后获得奖励点 r_i,已经打卡过的点不能再去。需要在规定 m 分钟内完成,尽可能多的收获奖励点,求获得最多的奖励点数。输入描述:第一行两个整数,打卡点的数量 n 和限制时间 m第 2 到 1 + n 行,每行两个整数 m_i,r_i数字以空格分割,其中 0 < n <= 100,1 <= m <= 120,1 <= m_i <= 10,1 <= r_i <= 100输出描原创 2022-04-24 20:29:37 · 3029 阅读 · 0 评论 -
【LeetCode】二进制间距
题目描述给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-gap著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请原创 2022-04-24 15:06:23 · 62 阅读 · 0 评论 -
找零钱问题刨析(Python代码)
零钱兑换给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/coin-change著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例示例 1:输入:coins = [1, 2, 5], amo原创 2022-04-20 21:54:36 · 4356 阅读 · 0 评论 -
连续子串和被b整除
题目描述给一个连续正整数组nums,求其中可以被k整除的子数组的个数。示例nums = [5, 2, 2]b = 3方法哈希表优化创建一个计数器dic,用来记录当前下标到i时的子串和total对k求余得到的数出现的次数。如果当前子数组和total对k求余存在于dic中,则子数组个数count加上键对应的值。然后将total对k求余的结果进行计数。class Solution: def subarraySum(self, nums, k): dic = collec原创 2022-04-20 10:38:31 · 426 阅读 · 0 评论 -
剑指 Offer II 010. 和为 k 的子数组
题目描述给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。示例示例 1 :输入:nums = [1,1,1], k = 2输出: 2解释: 此题 [1,1] 与 [1,1] 为两种不同的情况示例 2 :输入:nums = [1,2,3], k = 3输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/QTMn0o著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法暴力法c原创 2022-04-19 22:33:39 · 130 阅读 · 0 评论 -
乘积小于 K 的子数组(nan)
题目描述给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。示例示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8 个乘积小于 100 的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0来源:力扣(LeetC原创 2022-04-19 21:17:54 · 297 阅读 · 0 评论 -
数组中和为 0 的三个数
题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/1fGaJU著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:原创 2022-04-18 21:16:57 · 187 阅读 · 0 评论 -
【剑指 Offer 48】最长不含重复字符的子字符串
题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不原创 2022-04-14 16:32:25 · 201 阅读 · 0 评论 -
【LeetCode】二倍数对数组
题目描述给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 “对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 * arr[2 * i]” 时,返回 true;否则,返回 false。示例示例 1:输入:arr = [3,1,3,6]输出:false示例 2:输入:arr = [2,1,2,6]输出:false示例 3:输入:arr = [4,-2,2,-4]输出:true解释:可以用 [-2,-4]原创 2022-04-01 20:02:56 · 415 阅读 · 0 评论 -
【LeetCode】定长子串中元音的最大数目
题目描述给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。英文中的 元音字母 为(a, e, i, o, u)。示例示例 1:输入:s = “abciiidef”, k = 3输出:3解释:子字符串 “iii” 包含 3 个元音字母。示例 2:输入:s = “aeiou”, k = 2输出:2解释:任意长度为 2 的子字符串都包含 2 个元音字母。示例 3:输入:s = “leetcode”, k = 3输出:2解释:“l原创 2022-04-01 18:59:58 · 304 阅读 · 0 评论 -
【LeetCode】二叉树的最近公共祖先和树的子结构
题目描述(二叉树的最近公共祖先)给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”(树的子结构)输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。方法(参考)前序遍历+递归代码一(236.二叉树的最近公共祖先)二原创 2022-03-31 15:47:42 · 346 阅读 · 0 评论 -
【LeetCode】二叉树的镜像和对称的二叉树
题目描述剑指 Offer 27. 二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。剑指 Offer 28. 对称的二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。示例剑指 Offer 27. 二叉树的镜像输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]剑指 Offer 28. 对称的二叉树示例 1:输入:root = [1,2,2,3,4,4,3]输出:true原创 2022-03-30 14:31:01 · 1016 阅读 · 1 评论 -
【LeetCode】 二维数组中的查找
题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给原创 2022-03-29 22:13:09 · 616 阅读 · 0 评论 -
【LeetCode】考试的最大困扰度
题目描述一位老师正在出一场由 n 道判断题构成的考试,每道题的答案为 true (用 ‘T’ 表示)或者 false (用 ‘F’ 表示)。老师想增加学生对自己做出答案的不确定性,方法是 最大化 有 连续相同 结果的题数。(也就是连续出现 true 或者连续出现 false)。给你一个字符串 answerKey ,其中 answerKey[i] 是第 i 个问题的正确结果。除此以外,还给你一个整数 k ,表示你能进行以下操作的最多次数:每次操作中,将问题的正确答案改为 ‘T’ 或者 ‘F’ (也就是将原创 2022-03-29 16:14:40 · 152 阅读 · 0 评论 -
【LeetCode】路径总和
题目描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。方法一采用广度优先搜索方法(BFS)进行目标和的查找。技巧:创建一个保存根节点到当前节点的和的列表(queue_val),同时和节点列表(queue)进行操作,当左节点和右节点同时为空时,判断queue_val和targetSu原创 2022-03-25 20:39:28 · 252 阅读 · 0 评论 -
【LeetCode】删除并获得点数
题目描述给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例 2:输入:nums =原创 2022-03-22 15:27:03 · 444 阅读 · 0 评论 -
【LeetCode】如果相邻两个颜色均相同则删除当前颜色
题目描述总共有 n 个颜色片段排成一列,每个颜色片段要么是 ‘A’ 要么是 ‘B’ 。给你一个长度为 n 的字符串 colors ,其中 colors[i] 表示第 i 个颜色片段的颜色。Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。如果一个颜色片段为 ‘A’ 且 相邻两个颜色 都是颜色 ‘A’ ,那么 Alice 可以删除该颜色片段。Alice 不可以 删除任何颜色 ‘B’ 片段。如果一个颜色片段为 ‘B’ 且 相邻两个颜色 都是颜色 ‘B’ ,那么原创 2022-03-22 10:06:27 · 85 阅读 · 0 评论 -
【LeetCode】350. 两个数组的交集 II(附collections.Counter操作)
题目描述给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]方法利用哈希表记录较短字符串中每个数字出现的次数,遍历较长的表,如果较长表原创 2022-03-21 10:00:06 · 88 阅读 · 0 评论 -
【LeetCode:DP】746.使用最小花费爬楼梯
题目描述给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例示例 1:输入:cost = [10,15,20]输出:15解释:你将从下标为 1 的台阶开始。支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。示例 2:输入:cost = [1,100,1,1,1,100,1,1,1原创 2022-03-20 20:11:29 · 105 阅读 · 0 评论 -
【LeetCode:BFS】剑指 Offer 13.机器人的运动范围
题目描述地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:原创 2022-03-19 16:06:52 · 80 阅读 · 0 评论 -
【LeetCode】词典中最长的单词(附集合操作、lamda用法)
题目描述给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。示例示例 1:输入:words = [“w”,“wo”,“wor”,“worl”, “world”]输出:“world”解释: 单词"world"可由"w", “wo”, “wor”, 和 "worl"逐步添加一个字母组成。示例 2:输入:words = [原创 2022-03-17 21:22:10 · 6183 阅读 · 0 评论 -
【LeetCode:DFS】剑指 Offer 12. 矩阵中的路径
题目描述给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。题目链接方法深度优先搜索结合剪枝。总代码class Solution: def exist(self, board, word): def dfs(i, j, k):原创 2022-03-17 09:38:43 · 59 阅读 · 0 评论 -
【LeetCode】N叉树遍历
题目描述给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。示例示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]方法N叉树遍历相对于二叉树遍历,我们要考虑他的N个孩子,因此引入for循环遍历访问N个孩子即可。总代码二叉树遍历# Definition for a binary tree node.# class原创 2022-03-10 10:15:33 · 531 阅读 · 0 评论 -
编程题按类型整理记录
动态规划(Dynamic programming: DP)二分查找153.寻找旋转排序数组中的最小值154.寻找旋转排序数组中的最小值 II-----持续更新------原创 2022-03-09 21:35:36 · 322 阅读 · 0 评论 -
【LeetCode】旋转数组的最小数字
题目描述已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。给你一个元素值 互不相同 的数原创 2022-03-09 21:31:57 · 76 阅读 · 0 评论 -
【LeetCode】斐波那契数和青蛙跳台阶问题
题目描述斐波那契数问题:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:原创 2022-03-09 20:43:58 · 110 阅读 · 0 评论