
LeetCode
文章平均质量分 53
自己对LeetCode的题解
chnhbhndchngn
这个作者很懒,什么都没留下…
展开
-
566. 重塑矩阵
在MATLAB中,有一个非常有用的函数reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。这篇文章的三个版本的代码的效率差别并不是很大第一版代码:主要思想就是把原始的数组拉伸放到一个新的列表中, 然后从这个列表中整行整行地取.原创 2021-02-17 11:17:25 · 255 阅读 · 1 评论 -
461. 汉明距离
461. 汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数x和y,计算它们之间的汉明距离。注意:0 ≤x,y< 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。第一版代码: 就是直接求整数的二进制表达式, 又因为前两位是"0b", 从第三位开始截取有用的信息.又因为如果两个数差...原创 2021-02-16 23:24:18 · 332 阅读 · 0 评论 -
485. 最大连续 1 的个数
485. 最大连续 1 的个数难度 简单给定一个二进制数组, 计算其中最大连续 1 的个数。第一版代码: 没啥解释的, 很直观的代码, 缺点就是使用了很多字符串和列表的独有的方法, 并且来回转换格式, 耗时较多class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int: li = map(str, nums) li = "".join(li)原创 2021-02-16 17:50:17 · 226 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
难度 简单给定一个范围在 1 ≤ a[i] ≤n(n= 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1,n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]思路: 首先创造一个空列表, 列表的所有值都是0, 因为原始的列表是没有0 的, 所以我们创建的这个列表要以原始...原创 2021-02-13 10:29:59 · 176 阅读 · 0 评论 -
567. 字符串的排列
难度 中等给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。这道题其实就是从s2中选取与s1等长的字符串(如果长度都不相同, 那么无论s1无论怎么组合都不成的), 然后判断其中的数据统计结果是不是一样, 应该算是比较简单的题,我首先想到的就是将统计结果存到一个字典当中, 这里容易忽略的一点就是当字典中某个键的值为0的时候是需要删除这个键的第一版代码class Solution: def chec...原创 2021-02-10 11:40:06 · 223 阅读 · 0 评论 -
1423. 可获得的最大点数
1423. 可获得的最大点数难度中等几张卡牌排成一行,每张卡牌都有一个对应的点数。点数由整数数组cardPoints给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿k张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组cardPoints和整数k,请你返回可以获得的最大点数。示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右...原创 2021-02-06 22:30:07 · 131 阅读 · 0 评论 -
66. 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 ...原创 2021-02-04 19:58:21 · 127 阅读 · 0 评论 -
643. 子数组最大平均数 I
643. 子数组最大平均数 I给定n个整数,找出平均数最大且长度为k的连续子数组,并输出该最大平均数。示例:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75第一版代码(直接求解: 每K个求一下平均数)class Solution: def findMaxAverage(self, nums: List[int], k: int) -> float: ...原创 2021-02-04 13:23:51 · 284 阅读 · 0 评论 -
888 公平的糖果棒交换
888. 公平的糖果棒交换连接:https://leetcode-cn.com/problems/fair-candy-swap/submissions/爱丽丝和鲍勃有不同大小的糖果棒:A[i]是爱丽丝拥有的第i根糖果棒的大小,B[j]是鲍勃拥有的第j根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组ans,其中ans[0]是爱丽丝必须交换的糖果棒的大小,an...原创 2021-02-01 19:18:22 · 176 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点难度简单给定一棵二叉搜索树,请找出其中第k大的节点。class Solution: def kthLargest(self, root: TreeNode, k: int) -> int: res = None def reverIntertravel(node): nonlocal res nonlocal k if not原创 2020-08-15 00:45:01 · 116 阅读 · 0 评论 -
337. 打家劫舍 III
337. 打家劫舍 III难度中等在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。# Definition for a binary tree node.# class TreeN原创 2020-08-05 13:51:27 · 171 阅读 · 0 评论 -
894. 所有可能的满二叉树
894. 所有可能的满二叉树难度中等满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含N个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有node.val=0。你可以按任何顺序返回树的最终列表。class Solution: def allPossibleFBT(self, N: int) -> List[TreeNode]: def allTree(start, end...原创 2020-07-22 11:18:06 · 166 阅读 · 0 评论 -
783. 二叉搜索树节点最小距离
783. 二叉搜索树节点最小距离难度简单66给定一个二叉搜索树的根节点root,返回树中任意两节点的差的最小值。class Solution: def minDiffInBST(self, root: TreeNode) -> int: def travel(node): if not node: return [] return travel(node.left) + [node..原创 2020-07-22 09:59:55 · 1049 阅读 · 0 评论 -
95 96 不同的二叉搜索树
96. 不同的二叉搜索树难度中等给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?class Solution: def numTrees(self, n: int) -> int: if n == 0 or n == 1: return n dp = [0] * (n + 1) dp[0] = 1 dp[1] = 1 ...原创 2020-07-19 15:30:11 · 139 阅读 · 0 评论 -
只出现一次或缺失的数字
136. 只出现一次的数字https://leetcode-cn.com/problems/single-number/难度简单给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。class Solution: def singleNumber(self, nums: List[int]) -> int: for i in range(1, len(nums)): nums[0] = n..原创 2020-07-11 22:46:24 · 182 阅读 · 1 评论 -
718. 最长重复子数组
718. 最长重复子数组难度中等给两个整数数组A和B,返回两个数组中公共的、长度最长的子数组的长度。class Solution: def findLength(self, A: List[int], B: List[int]) -> int: dp = [0 for i in range(len(B))] ans = 0 for i in range(len(A)): for j in range...原创 2020-07-11 17:06:43 · 120 阅读 · 0 评论 -
647. 回文子串
647. 回文子串难度中等282给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。class Solution: def countSubstrings(self, s: str) -> int: dp = [0 for i in range(len(s))] ans = 0 for i in range(len(s) - 1, -1,原创 2020-07-11 16:44:14 · 129 阅读 · 1 评论 -
LeetCode 292. Nim 游戏
LeetCode292. Nim 游戏https://leetcode-cn.com/problems/nim-game/难度简单你和你的朋友,两个人一起玩Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。class Solution: def canWinNim(self, n: int) -> bool:...原创 2020-07-07 17:20:41 · 133 阅读 · 0 评论 -
LeetCode 237. 删除链表中的节点
LeetCode237. 删除链表中的节点https://leetcode-cn.com/problems/delete-node-in-a-linked-list/难度简单请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。这道题只给了一个节点, 并没有给head, 让人懵逼半天, 看到非末尾节点才想起来怎么做# Definition for singly-linked list.# class ListNode:# def __i.原创 2020-07-07 17:14:03 · 116 阅读 · 0 评论 -
LeetCode 739. 每日温度
LeetCode739. 每日温度难度中等请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0来代替。class Solution: def dailyTemperatures(self, T: List[int]) -> List[int]: length = len(T) stack = [] ans = [0] * length...原创 2020-07-04 23:43:29 · 152 阅读 · 0 评论 -
LeetCode32 最长有效括号
LeetCode32. 最长有效括号给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。class Solution: def longestValidParentheses(self, s: str) -> int: left, right, maxlen = 0, 0, 0 # left 代表左括号的个数, right代表右括号的个数 # 从左到右遍历 for char in s:...原创 2020-07-04 18:47:01 · 241 阅读 · 0 评论 -
回文子串的数量
647. 回文子串难度 中等给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串class Solution: def countSubstrings(self, s: str) -> int: str_len = len(s) if str_len == 0 or s is None: return 0 dp =原创 2020-07-02 01:00:16 · 973 阅读 · 0 评论 -
leetcode 链表求和 两种方法 迭代和递归
面试题 02.05. 链表求和https://leetcode-cn.com/problems/sum-lists-lcci/给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912# Definition for singly-原创 2020-06-28 23:54:41 · 768 阅读 · 0 评论 -
leetcode 209 长度最小的子数组
209. 长度最小的子数组难度 中等给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和≥ s的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。使用两个指针, 使用滑动窗口的思想, 当窗口内的数据之和小于target时, 右侧增加数据, 当窗口之内数据之和大于等于target时, 左侧减少数据, 直到右侧不能移动第一个版本:class Solution: def minSubArrayLen(self, s: int, nu...原创 2020-06-28 21:10:02 · 163 阅读 · 0 评论 -
leetcode 102 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。和一般的遍历层次遍历没啥区别,只是每行都单独存在一个列表里class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = None...原创 2019-12-29 22:32:13 · 137 阅读 · 0 评论 -
LeetCode 213 打家劫舍二
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。class Solution(object): ...原创 2019-12-29 19:55:47 · 128 阅读 · 0 评论 -
leetcode 101 对称二叉树
题目给定一个二叉树,检查它是否是镜像对称的。方法一 递归:class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def isSymmetric(self, root: T...原创 2019-12-27 20:24:21 · 120 阅读 · 0 评论 -
leetcode 136 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。class Solution: def singleNumber(self, nums: List[int]) -> int: res = 0 for i in nums: res = res ^ i re...原创 2019-12-26 10:06:27 · 176 阅读 · 0 评论 -
LeetCode 110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Sol...原创 2019-12-26 00:26:24 · 131 阅读 · 0 评论 -
LeetCode 104 二叉树的深度
LeetCode第104题给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。使用递归求解# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x ...原创 2019-12-25 23:54:17 · 158 阅读 · 0 评论