
LeetCode
manba_
这个作者很懒,什么都没留下…
展开
-
LeetCode-1. 两数之和
题目描述给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。思路暴力法class Solution(object): def twoSum(self, nums, target): """ ...原创 2019-08-02 19:52:06 · 104 阅读 · 0 评论 -
LeetCode-34. 在排序数组中查找元素的第一个和最后一个位置
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。思路先用二分查找找到目标值 以找到的目标值为中心,分别从前,从后去看是否和目标值一样 返回【下标】class Solution(object): ...原创 2019-08-11 13:24:09 · 111 阅读 · 0 评论 -
LeetCode-240. 搜索二维矩阵 II
题目描述编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。思路和剑指offer二维数组中的查找这题一样https://blog.youkuaiyun.com/m0_38098373/article/details/93631241class Sol...原创 2019-08-11 14:26:27 · 110 阅读 · 0 评论 -
LeetCode-104. 二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。思路和剑指offer求二叉树树的深度一样https://blog.youkuaiyun.com/m0_38098373/article/details/94622303# Definition for a binary tree node.# c...原创 2019-08-21 08:26:07 · 120 阅读 · 0 评论 -
LeetCode-101. 对称二叉树
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3]是对称的。思路和剑指offer对称的二叉树一样https://blog.youkuaiyun.com/m0_38098373/article/details/94642889# Definition for a binary tree node.# class TreeNode(objec...原创 2019-08-21 08:39:49 · 108 阅读 · 0 评论 -
LeetCode-105. 从前序与中序遍历序列构造二叉树
题目描述根据一棵树的前序遍历与中序遍历构造二叉树。 你可以假设树中没有重复的元素。思路和剑指offer的重建二叉树一样https://blog.youkuaiyun.com/m0_38098373/article/details/94544796# Definition for a binary tree node.# class TreeNode(object)...原创 2019-08-21 09:06:08 · 135 阅读 · 0 评论 -
LeetCode-287. 寻找重复数
题目描述给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。思路 二分查找,但并不是常规的对数组索引二分查找,而是对数组中的数值来做1到n取中位数mid 遍历数组,记录数组中小于mid数的个数 如果次数大于等于mid,则说明mid的左边存在重复数 否则...原创 2019-08-12 15:27:45 · 121 阅读 · 0 评论 -
LeetCode-200. 岛屿数量
题目描述给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。思路这道题和剑指offer矩阵中的路径和机器人的运动范围类似,https://blog.youkuaiyun.com/m0_38098373/article/details/94023539但不同的地方是:...原创 2019-08-21 16:29:51 · 145 阅读 · 0 评论 -
LeetCode-70. 爬楼梯
题目描述假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。思路 动态规划如果上的台阶<3,那么直接返回要上的台阶数即可 当大于3时,先创建一个长度为n+1全为0的数组(n+1是因为使要上的台阶数与数组下标保持同步) 状态转移方程使我们最后一步是选择上一个台阶和...原创 2019-08-12 19:21:44 · 92 阅读 · 0 评论 -
LeetCode-198. 打家劫舍
题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。思路 动态规划在写初始状态之前,先把一些超出数组索引的条件写完 创建与数组等长的...原创 2019-08-12 19:58:51 · 84 阅读 · 0 评论 -
LeetCode-139. 单词拆分
题目描述给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。思路动态规划判断从当前切分,先检测一下切分点之前是否为True, 之后再看当前切分的单词是或否在字典中 首先需创建一个len(s)+1的一位数组(因为从首位切分时,0位之前为True) 最后返回数组最后一位保存的值class Solu...原创 2019-08-17 07:34:15 · 114 阅读 · 0 评论 -
LeetCode-152. 乘积最大子序列
题目描述给定一个整数数组nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。思路 当前的最大值有三种可能:之前的最大值乘以当前值 之前的最小值是个负数,当前来的这个数也是个负数,一乘反而成了最大值 当前值比上述说的都大 因此,我们在保留当前最大值的时候,也要保留当前的最小值,以备后用 每一轮算完的最大,最小值再当作下一轮之前的最大,最小值处理...原创 2019-08-17 20:00:34 · 106 阅读 · 0 评论 -
LeetCode-221. 最大正方形
题目描述在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。思路 二维dp创建一个与给定matrix等大的二维数组,用于保存以i,j为右下角的正方形边长 当前值为1时,才有可能组成正方形,计算边长有以下两种情况 如果位于第一行或者第一列,直接将当前值记为边长为1即可 不是上述情况,就要分别去看当前值的左边,上边,左上边,三值中的最小值+...原创 2019-08-17 21:30:27 · 122 阅读 · 0 评论 -
LeetCode-78. 子集
题目描述给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。思路 回溯法,和全排列那题类似,但不需要状态数组按给定的数组依次存入列表中 到底时,回到上一层class Solution(object): def subsets(self, nums): """ :type ...原创 2019-08-23 15:57:16 · 131 阅读 · 0 评论 -
LeetCode-33. 搜索旋转排序数组
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。思路 两次二分查找,第一次二分查找找最小值...原创 2019-08-11 11:29:03 · 118 阅读 · 0 评论 -
LeetCode-5. 最长回文子串
题目描述给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。思路 二维dp,还是去往二维数组里填数字,这次填的是bool型。当只有一个字符时,最长回文子串就是它本身 创建一个全为False的二维数组 初始化第0行0列为True,因为要返回的并不是bool,所以还需创建一个列表,来保存最长回文子串,初始值为s[0] 之后就是填表了,因...原创 2019-08-14 15:39:36 · 120 阅读 · 0 评论 -
LeetCode-53. 最大子序和
题目描述给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。思路剑指offer原题https://blog.youkuaiyun.com/m0_38098373/article/details/93846908class Solution(object): def maxSubArray(self, nums): ...原创 2019-08-02 19:57:43 · 96 阅读 · 0 评论 -
LeetCode-121. 买卖股票的最佳时机
题目描述给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。思路动态规划状态转移方程:max{之前的最大值,当前的数 - 之前的最小值}class Solution(object): def maxProfit(self, ...原创 2019-08-03 21:00:04 · 116 阅读 · 0 评论 -
LeetCode-169. 求众数
题目描述给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。思路剑指offer原题https://blog.youkuaiyun.com/m0_38098373/article/details/93774793class Solution(object): def majorit...原创 2019-08-03 21:03:32 · 107 阅读 · 0 评论 -
LeetCode-283. 移动零
题目描述给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。思路1遇到0就删,记录删除0的个数 在末尾补0class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: Non...原创 2019-08-04 19:23:00 · 94 阅读 · 0 评论 -
LeetCode-448. 找到所有数组中消失的数字
题目描述给定一个范围在1 ≤ a[i] ≤ n (n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。思路1 类似剑指offer-数组中重复的数字https://blo...原创 2019-08-05 07:54:29 · 134 阅读 · 0 评论 -
LeetCode-581. 最短无序连续子数组
题目描述给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。思路先排序 排序后和原数组比对,从右往左找到第一个不相同的数记作start,再从左往右找到第一个不相同的数记作end 最短长度即为end-start+1class Solution(object): def fi...原创 2019-08-06 07:35:35 · 148 阅读 · 0 评论 -
LeetCode-15. 三数之和
题目描述给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。思路1 最后去重先将数组排序 从左到右依次固定第k个数 然后在固定数后面的区间里,找到两个数,使它们的和等于负固定的数(按照有序数组中找一个和为target的两个数的方法来做,双指针) 循环结束条件...原创 2019-08-08 17:01:38 · 127 阅读 · 0 评论 -
LeetCode-11. 盛最多水的容器
题目描述给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。思路一前一后指针,前后指针的差即为容器的底 无论前指针后移一位,还是后指针前移一位,底的值都不变 这时如果前指针指的值小于后指...原创 2019-08-06 17:39:27 · 102 阅读 · 0 评论 -
LeetCode-64. 最小路径和
题目描述给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。思路 二维dp:就像是一个填二维数组的游戏,填完再根据规则来选当前步的最优解,一定要注意边界条件先创建一个与网格等大的二维数组,方便填数 写好初始条件:左上角为原数组的左上角,由于第0行和第0列只能分别从左往右,从上到下,...原创 2019-08-13 19:11:32 · 94 阅读 · 0 评论 -
LeetCode-62. 不同路径
题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?思路 这道题和64题最小路径和类似不同的是需创建一个全为1的数组,因为由于只能向下或向右,造成第0行和第0列只能有唯一的路径 之后状态转移的规则就...原创 2019-08-13 19:32:13 · 167 阅读 · 0 评论 -
LeetCode-96. 不同的二叉搜索树
题目描述给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?思路G(n)=f(1)+f(2)+f(3)+...+f(n) 以1到n为结点的二叉搜索树可以看成分别以1当根节点组成搜索树的棵树一直加到以n为根节点的棵树 而由于二叉搜索树是有序的,当以i为根节点的时候,左子树有i-1棵,右子树有n-i棵 f(i)=G(i-1)*G(n-i) 带入G(n) G(n...原创 2019-08-13 21:27:32 · 131 阅读 · 0 评论 -
LeetCode-31. 下一个排列
题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。思路从后向前遍历 找到第一个正序对(nums[i-1]<nums[i]),记录i-1的位置 在i到末尾这段区间中,从后往前找到第一个大于num[i-1]的值(从后往前找...原创 2019-08-09 12:41:20 · 106 阅读 · 0 评论 -
LeetCode-300. 最长上升子序列
题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。思路一维dp,首先设置一个和数组等长的一维数组,用来填数,初始化有时是0,1,False(这道题因为求的是最长上升子序的长度,只要有数,默认就是1) 我是谁:即dp数组里每一位要填的是什么? 问题求的是最长上升子序列的长度,即每一个位置应该代表当前这个位置对应这个问题的最优解(当前最长上升子序列的长度) 我从哪里来:第...原创 2019-08-19 15:52:22 · 111 阅读 · 0 评论 -
LeetCode-46. 全排列
题目描述给定一个没有重复数字的序列,返回其所有可能的全排列。思路 回溯法:深度优先(不撞南墙不回头)+ 状态重置需要设置一个状态数组,用来保存是否之前遍历到它 按照数组顺序开始依次放入数组中,走到底时(撞到墙了,好疼,开始回头),状态重置(退出最后一个元素,改变它的状态数组) 遍历出一个结果(递归出口):当前已经成为一个完整的结果 Ps:这篇文章讲的很好h...原创 2019-08-23 11:47:37 · 147 阅读 · 0 评论