Leetcode 刷题
以python为编程语言,对Leetcode常见面试题进行汇总。
hr_net
这个作者很懒,什么都没留下…
展开
-
全排列demo
全排列demo原创 2022-10-08 20:21:45 · 162 阅读 · 0 评论 -
leetcode 2. 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807# Definition for singly-..原创 2020-11-20 20:34:44 · 138 阅读 · 0 评论 -
Leetcode 495. 提莫攻击
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。示例1:输入: [1,4], 2 (中毒时长)输出: 4原因: 在第 1 秒开始时,提莫开始对艾希进行攻击并使其立...原创 2019-07-08 23:59:39 · 338 阅读 · 0 评论 -
746. 使用最小花费爬楼梯
数组的每个索引做为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从c...原创 2019-07-08 16:15:42 · 76 阅读 · 0 评论 -
Leetcode1029. 两地调度
公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。示例:输入:[[10,20],[30,200],[400,50],[30,20]]输出:110解释:第一个人去 A 市,费用为 10。第二个人去 A 市,费用为 30。第三个人去 B...原创 2019-06-19 21:43:13 · 314 阅读 · 0 评论 -
Leetcode 21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4tips: 与合并两个有序数组思路一致,可以用迭代与递归两种方法。递归代码如下:class Solution: def mergeT...原创 2019-06-13 17:23:41 · 103 阅读 · 0 评论 -
Leetcode 226. 翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1tips:这道题很简单,可以用递归和非递归两种方法来解。先来看递归的方法,写法非常简洁,只需要三行代码搞定:交换当前左右节点,然后...原创 2019-06-13 11:26:23 · 118 阅读 · 0 评论 -
Leetcode 63. 不同路径 II
该题是Leetcode 62. 不同路径 https://blog.csdn.net/qq_38742161/article/details/90814802的增强版本,需要将62掌握后再分析该题。一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。...原创 2019-06-04 23:24:42 · 116 阅读 · 0 评论 -
Leetcode 62. 不同路径
一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m和n的值均不超过 100。示例1:输入: m = 3, n = 2输出: 3解释:...原创 2019-06-04 22:53:37 · 100 阅读 · 0 评论 -
Leetcode 136/137/260只出现一次的数字汇总
136. 只出现一次的数字 I给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4tips:除去目标数之外,其余均只出现两次。我们知道,异或...原创 2019-05-21 21:25:40 · 112 阅读 · 0 评论 -
Leetcode 206/92/24链表翻转系列
206. 翻转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLtips:该题是基础题,维护三个变量即可,pre,cur,next。先读取next,然后再讲cur的指针指向pre。然后更新pre与cur。在切断链表时,一定要先保存切断节点的下一个...原创 2019-05-21 11:25:03 · 164 阅读 · 0 评论 -
Leetcode 239. 滑动窗口最大值
给定一个数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口k内的数字。滑动窗口每次只向右移动一位。返回滑动窗口最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值----------...原创 2019-05-20 16:44:01 · 305 阅读 · 0 评论 -
Leetcode 6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为"LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换...原创 2019-05-20 15:17:12 · 197 阅读 · 0 评论 -
Leetcode 516. 最长回文子序列
leetcode回文串/列汇总:https://blog.csdn.net/qq_38742161/article/details/90209268Leetcode 5. 最长回文子串https://blog.csdn.net/qq_38742161/article/details/90210716Leetcode 647. 回文子串给定一个字符串s,找到其中最长的回文子序列。可...原创 2019-05-15 11:41:33 · 2730 阅读 · 0 评论 -
Leetcode 647. 回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例 2:输入: "aaa"输出: 6说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa"....原创 2019-05-14 17:18:26 · 735 阅读 · 0 评论 -
Leetcode 5. 最长回文子串
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"tips:1.暴力搜索方式中,寻找子串的复杂度为O(n**2),在每一个子串中进行回文判断,嵌套一个O(n),故暴力搜索的复杂度为O(n*...原创 2019-05-14 16:34:21 · 335 阅读 · 0 评论 -
Leetcode 209. 长度最小的子数组
给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和≥ s的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组[4,3]是该条件下的长度最小的连续子数组。facebook 面试题;tips:方法一,暴力求解复杂度O(n**2),维护数组减...原创 2019-05-10 11:09:06 · 70 阅读 · 0 评论 -
Leetcode 104. 二叉树的最大深度and 最小深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。tips: 二叉树递归方法,当前树最大深度=max(左子树最大深度,右子树...原创 2019-05-09 17:27:55 · 97 阅读 · 0 评论 -
Leetcode 101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3]是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3]则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和迭代两种方法...原创 2019-05-09 17:10:14 · 68 阅读 · 0 评论 -
Leetcode 188. 买卖股票的最佳时机 IV
给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所...原创 2019-05-06 16:06:19 · 189 阅读 · 0 评论 -
Leetcode 123. 买卖股票的最佳时机 III
给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能...原创 2019-05-06 15:30:56 · 161 阅读 · 0 评论 -
Leetcode 122. 买卖股票的最佳时机 II
给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这...原创 2019-05-05 20:45:23 · 135 阅读 · 0 评论 -
Leetcode 121. 买卖股票的最佳时机
给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2019-05-05 20:23:14 · 132 阅读 · 0 评论 -
Leetcode 877. 石子游戏
亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子piles[i]。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回true,...原创 2019-05-05 16:53:42 · 226 阅读 · 0 评论 -
Leetcode: 130. 被围绕的区域
给定一个二维的矩阵,包含'X'和'O'(字母 O)。找到所有被'X'围绕的区域,并将这些区域里所有的'O'用'X'填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的'O'...原创 2019-04-29 00:14:49 · 133 阅读 · 0 评论 -
Leetcode: 200. 岛屿的个数
给定一个由'1'(陆地)和'0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1示例2:输入:11000110000010000011输出: 3tips: 上下左右深度优先遍历。...原创 2019-04-28 23:05:35 · 236 阅读 · 0 评论 -
Leecode: 98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 ...原创 2019-04-26 00:30:53 · 144 阅读 · 0 评论 -
Leetcode: 437. 路径总和 III
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8...原创 2019-04-17 17:31:57 · 75 阅读 · 0 评论 -
Leetcode:257/113 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3tips:遍历二叉树的所有路径,最直接的便是深度优先搜索(DFS...原创 2019-04-17 10:28:54 · 111 阅读 · 0 评论 -
Leetcode之丑数系列
263. 编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数2, 3, 5的正整数。示例 1:输入: 6输出: true解释: 6 = 2 ×3示例 2:输入: 8输出: true解释: 8 = 2 × 2 ×2示例3:输入: 14输出: false 解释: 14 不是丑数,因为它包含了另外一个质因数7说明:1是丑数。 输...原创 2019-04-15 22:16:52 · 1698 阅读 · 0 评论 -
Leetcode:46/47 全排列
46. 给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]tips:分治思想,先固定首位元素,首位元素的选择可以有len(nums)种,即我们可以依次将首元素与第0 至len(nums)-1依次调换,得...原创 2019-04-15 16:30:38 · 70 阅读 · 0 评论 -
Leetcode:15 三数之和
给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]tips:三个...原创 2019-04-08 17:34:18 · 87 阅读 · 0 评论 -
Leetcode28字符串匹配之KMP算法
KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。题目描述:实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystac...原创 2019-04-01 17:30:55 · 533 阅读 · 0 评论 -
Leetcode:34二分法查找之在排序数组中查找元素的第一个和最后一个位置
本文对二分法查找及其变形做一个总结。给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(logn) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:...原创 2019-03-27 11:18:19 · 674 阅读 · 0 评论 -
Leetcode:20 有效的括号
给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false...原创 2019-03-26 23:31:53 · 120 阅读 · 0 评论 -
Leetcode:128最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为O(n)。示例:输入:[100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是[1, 2, 3, 4]。它的长度为 4。思路:时间复杂度为O(n),排除排序;以开辟空间来节约时间,引入哈希表,一次遍历得到数组各个位置对应的连续序列长度。即键:数组的元素,值:连续序列长度。分...原创 2019-03-26 20:12:55 · 143 阅读 · 0 评论