
leetcode
水木流年追梦
清华大学计算机研究生,专研算法工程
展开
-
面试题50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。示例:s = "abaccdeff"返回 "b"s = ""返回 " "可以活用python字典。class Solution: def firstUniqChar(self, s: str) -> str: numdic = dict() for ...原创 2020-02-25 17:23:10 · 287 阅读 · 1 评论 -
leetcode 39. 组合总和
在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,...原创 2020-03-30 19:53:17 · 304 阅读 · 0 评论 -
leetcode 312. 戳气球
有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组nums中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得nums[left] * nums[i] * nums[right]个硬币。这里的left和right代表和i相邻的两个气球的序号。注意当你戳破了气球 i 后,气球left和气球right就变成了相邻的气球。...原创 2020-03-30 19:31:59 · 415 阅读 · 0 评论 -
leetcode 287. 寻找重复数
给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3class Solution(object): def findDuplicate(s...原创 2020-03-25 16:02:04 · 199 阅读 · 0 评论 -
leetcode 102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]用递归的方法# Definition for a binary tre...原创 2020-03-25 15:43:06 · 245 阅读 · 0 评论 -
142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node inde...原创 2020-03-23 20:22:48 · 187 阅读 · 0 评论 -
牛客网编程题——字符串_空格替换
题目描述请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个stringiniString为原始的串,以及串的长度 intlen, 返回替换后的string。测试样例:"Mr John Smith”,13返回:"Mr%20John%20...原创 2020-03-17 23:09:28 · 443 阅读 · 0 评论 -
牛客网编程题——字符串_确定两串乱序同构
题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串中的空格。给定一个stringstringA和一个stringstringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。测试样例:"This is nowcoder","is This nowcoder"...原创 2020-03-17 23:07:28 · 345 阅读 · 0 评论 -
leetcode 151. 翻转字符串里的单词
可以说这道题我做的奇丑无比,但思路还是明确的。class Solution: def reverseWords(self, s: str) -> str: res = "" restmp = "" if s == "" or s== " " or s==" ": return "" ...原创 2020-03-17 13:13:31 · 193 阅读 · 0 评论 -
leetcode 240. 搜索二维矩阵 II
编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17,...原创 2020-03-17 09:12:44 · 345 阅读 · 0 评论 -
剑指offer 面试题03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000class Soluti...原创 2020-03-16 21:54:12 · 365 阅读 · 0 评论 -
leetcode 1071. 字符串的最大公因子
对于字符串S 和T,只有在 S = T + ... + T(T与自身连接 1 次或多次)时,我们才认定“T 能除尽 S”。返回最长字符串X,要求满足X 能除尽 str1 且X 能除尽 str2。示例 1:输入:str1 = "ABCABC", str2 = "ABC"输出:"ABC"示例 2:输入:str1 = "ABABAB", str2 = "ABAB"...原创 2020-03-16 21:20:32 · 303 阅读 · 0 评论 -
剑指offer 面试题17. 打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数class Solution(object): def printNumbers(self, n): ...原创 2020-03-16 20:58:46 · 257 阅读 · 0 评论 -
leetcode 509. 斐波那契数
斐波那契数,通常用F(n) 表示,形成的序列称为斐波那契数列。该数列由0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定N,计算F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = ...原创 2020-03-16 20:48:58 · 226 阅读 · 0 评论 -
leetcode 235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root ...原创 2020-03-15 20:31:04 · 188 阅读 · 0 评论 -
剑指offer 面试题58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出:"cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出:"umghlrlo...原创 2020-03-15 15:35:19 · 275 阅读 · 0 评论 -
leetcode 239. 滑动窗口最大值
给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释: 滑动窗口的位置 最大值-----...原创 2020-03-15 15:20:18 · 274 阅读 · 0 评论 -
剑指offer 面试题59 - II. 队列的最大值
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value需要返回 -1示例 1:输入:["MaxQueue","push_back","push_back","max_value","pop_front","max_...原创 2020-03-15 14:55:54 · 416 阅读 · 0 评论 -
剑指offer 面试题61. 扑克牌中的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例1:输入: [1,2,3,4,5]输出: True示例2:输入: [0,0,1,2,5]输出: True限制:数组长度为 5数组的数取值为 [0, 13] ....原创 2020-03-15 14:20:15 · 316 阅读 · 0 评论 -
剑指offer 面试题62. 圆圈中最后剩下的数字
0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出:3示例 2:输入: n = 10, m = 17输出:2...原创 2020-03-15 13:51:13 · 314 阅读 · 0 评论 -
剑指offer 面试题63. 股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6...原创 2020-03-15 09:02:02 · 265 阅读 · 0 评论 -
剑指offer 面试题64. 求1+2+…+n
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出:6示例 2:输入: n = 9输出:45限制:1 <= n<= 10000class Solution(object): def sumNums(self,...原创 2020-03-15 08:44:17 · 248 阅读 · 0 评论 -
leetcode 961. 重复 N 次的元素
在大小为 2N的数组 A中有 N+1 个不同的元素,其中有一个元素重复了 N 次。返回重复了 N次的那个元素。示例 1:输入:[1,2,3,3]输出:3示例 2:输入:[2,1,2,5,3,2]输出:2示例3:输入:[5,1,5,2,5,3,5,4]输出:5统计每个元素的个数就可以用python真的犯规hhhhclass Solution(...原创 2020-03-15 01:26:09 · 323 阅读 · 0 评论 -
剑指offer 面试题49. 丑数
我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1是丑数。n不超过1690。题目可以巧用动态规划。将前面求得的丑数记录下来,后面的丑数就是前面的丑数*2,*3,...原创 2020-03-15 01:25:51 · 472 阅读 · 0 评论 -
leetcode 300. 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为O(n2) 。这个用动态规划的解法,dp[i]存储以位置i的数字结尾的最长上升子序列长...原创 2020-03-14 23:58:05 · 336 阅读 · 0 评论 -
leetcode4. 寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位...原创 2020-02-25 15:16:14 · 218 阅读 · 0 评论 -
leetcode3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"w...原创 2020-02-25 14:48:04 · 237 阅读 · 0 评论 -
leetcode力扣347. 前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]class Solution(object): def topKFrequent(self, nums, k): """ ...原创 2020-02-02 08:54:06 · 340 阅读 · 1 评论 -
leetcode力扣105. 从前序与中序遍历序列构造二叉树
我是清都山水郎,天教懒慢带疏狂。曾批给露支风券,累奏流云借月章。诗万首,酒千觞,几曾着眼看侯王。玉楼金阙慵归去,且插梅花醉洛阳。——朱敦儒 《鹧鸪天》根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉...原创 2020-02-01 16:46:44 · 374 阅读 · 0 评论 -
leetcode力扣338. 比特位计数
给定一个非负整数num。对于0 ≤ i ≤ num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例2:输入: 5输出: [0,1,1,2,1,2]class Solution(object): def countBits(self, num): """ ...原创 2020-02-01 10:22:04 · 299 阅读 · 0 评论 -
leetcode力扣406. 根据身高重建队列
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4]...原创 2020-02-01 17:28:30 · 1078 阅读 · 1 评论 -
leetcode力扣77. 组合
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]这个主要思想就是回溯法,在回溯函数调用之后去掉一个答案,回溯调用之前加入一个答案class Solution(object): def...原创 2020-01-31 19:25:07 · 326 阅读 · 0 评论 -
leetcode力扣64. 最小路径和
给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。分四种情况讨论,左上角边界,上边界,左边界,没边界class Solution: ...原创 2020-01-31 10:39:45 · 467 阅读 · 0 评论 -
leetcode力扣647. 回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例 2:输入: "aaa"输出: 6说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".c...原创 2020-01-30 14:29:49 · 469 阅读 · 0 评论 -
leetcode力扣617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入: Tree 1 Tree 2 ...原创 2020-01-30 11:38:30 · 359 阅读 · 0 评论 -
leetcode力扣78. 子集
给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]都是得到一个迭代器,这里combinations得到的是nums里的i个数据的组合,还有pe...原创 2020-01-30 09:28:34 · 363 阅读 · 0 评论 -
leetcode力扣75. 颜色分类
给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]class Solution(object): d...原创 2020-01-30 09:20:24 · 390 阅读 · 0 评论 -
leetcode力扣62. 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m和 n 的值均不超过 100。示例1:输入: m = 3, n = 2输出: 3解释:从左上...原创 2020-01-30 09:15:23 · 279 阅读 · 0 评论 -
leetcode力扣49. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]class Solution(object): def groupAn...原创 2020-01-30 09:07:24 · 320 阅读 · 0 评论 -
leetcode力扣94. 二叉树的中序遍历
给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]python写中序遍历其实和c++很像# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):#...原创 2020-01-29 14:20:41 · 321 阅读 · 0 评论