leetcode
小智rando
这个作者很懒,什么都没留下…
展开
-
leetcode120 三角形最小路径和 中等
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。思路[[2],[3,4],[6,5,7],[4,1,8,3]]从上到下是有多条路径的,但是有些路径是部分重合的,比如下图红色部分,到5是可...原创 2019-08-21 12:52:30 · 91 阅读 · 0 评论 -
leetcode113路径总和 II 中等
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:...原创 2019-06-29 10:16:19 · 108 阅读 · 0 评论 -
leetcode22括号生成 中等
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路首先递归列举全部可能的排序结果,因为每次选择左括号或是右括号,为二叉树形结构,再对二叉树进行剪枝,减少不必要的递归观察例子可得:剪枝1:当前递归中,左...原创 2019-06-24 10:55:03 · 93 阅读 · 0 评论 -
leetcode295数据流的中位数 困难
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)...原创 2019-06-18 18:16:20 · 175 阅读 · 0 评论 -
leetcode215数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。思路方法一:通过排序,然后返回第K个...原创 2019-06-18 17:04:24 · 78 阅读 · 0 评论 -
leetcode155最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minS...原创 2019-06-12 10:08:31 · 122 阅读 · 0 评论 -
leetcode232用栈实现队列
使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); ...原创 2019-06-12 09:48:11 · 93 阅读 · 0 评论 -
leetcode225用队列实现栈
使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 deque...原创 2019-06-12 09:21:11 · 166 阅读 · 0 评论 -
leetcode40组合总和 II 中等
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1...原创 2019-06-21 10:17:45 · 112 阅读 · 0 评论 -
leetcode160相交链表
编写一个程序,找到两个单链表相交的起始节点。思路其中一个链表的每个节点地址存入set,再遍历另一个链表,是否重复/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(...原创 2019-06-05 09:24:32 · 88 阅读 · 0 评论 -
leetcode21合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2019-06-11 14:17:29 · 67 阅读 · 0 评论 -
leetcode138复制带随机指针的链表
思路深拷贝:即复制一个链表,复制之后两个链表相互独立,互不影响复制链表只需要解决两个问题next指针:先将链表全部节点push进vector,之后再将前一个指向后一个即可随机指针最大的问题在于如何处理随机指针:(map处理)(1)将节点分成第1到第n号(2)遍历节点时,将节点random的地址存入map的key,其所对应的val即为指向第几号节点(3)这样就知道了每个节点所随...原创 2019-06-11 14:05:17 · 84 阅读 · 0 评论 -
leetcode92反转链表2
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL思路有空再补上执行用时 : 0 ms, 在Reverse Linked List II的C++提交中击...原创 2019-06-04 13:04:17 · 201 阅读 · 0 评论 -
leetcode90子集II 中等
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]思路在上一个子集的基础上,先对数组排序,在push进result之前,先insert进set集合,即可保证子集不重复class Solution {public...原创 2019-06-20 09:56:25 · 104 阅读 · 0 评论 -
leetcode236二叉树的最近公共祖先 中等
思路采用路径解决问题。路径之和||先序遍历的算法:求p节点路径,求q节点路径,画出来,遍历两个路径,相同的节点都是公共祖先,离根最远的就是最后一个相同的节点,就是最近公共祖先class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { ...原创 2019-06-29 10:56:05 · 82 阅读 · 0 评论 -
leetcode114 二叉树展开为链表 中等
思路原地转换成链表,即不创建额外的空间,直接对树的左右子树变换位置。整体递归:1、如果有left,先将left转成链表,再接入root的右边,并保存left的先序遍历的最后一个节点last;2、如果有right,将right转成链表,并将转好的右子树链表接入last的右边;/** * Definition for a binary tree node. * struct Tr...原创 2019-07-14 14:51:03 · 69 阅读 · 0 评论 -
leetcode322 零钱兑换 中等
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每...转载 2019-08-06 13:18:35 · 78 阅读 · 0 评论 -
leetcode127 单词接龙 中等
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWo...原创 2019-07-27 20:19:37 · 123 阅读 · 0 评论 -
leetcode198 打家劫舍 简单
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号...原创 2019-08-01 15:06:00 · 91 阅读 · 0 评论 -
leetcode70 爬楼梯 简单
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶...原创 2019-08-01 13:33:23 · 113 阅读 · 0 评论 -
leetcode200 岛屿数量 中等
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3思路dfs,有一个巧妙的地方,就是每当从一个岛屿的第一个...原创 2019-07-27 16:18:05 · 105 阅读 · 0 评论 -
leetcode53 最大子序和 简单
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。*做题没有思路的时候,先举几个例子推敲总结经验思路对于最大最小、连续、、等等首先想到动态规划的解决思路1、确认原问题和子问题原问题为第n个索引之前具...转载 2019-08-03 21:32:21 · 89 阅读 · 0 评论 -
leetcode449 序列化和反序列化二叉搜索树 中等
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化二叉搜索树。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。编码的字符串应尽可能紧凑。注意:不要使用类成员/全局/静态变量来存储状态...原创 2019-07-25 16:41:15 · 146 阅读 · 0 评论 -
leetcode33 搜索旋转排序数组 中等
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], targ...原创 2019-07-21 16:47:41 · 75 阅读 · 0 评论 -
leetcode473 火柴拼正方形 中等
还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到。输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。示例 1:输入: [1,1,2,2,2]输出: true解释: 能拼成一个边长为2的正方形,每边两根火柴。示例 2:输入: [3,3...原创 2019-07-29 18:16:38 · 177 阅读 · 0 评论 -
leetcode34 在排序数组中查找元素的第一个和最后一个位置 中等
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], targ...原创 2019-07-19 11:14:01 · 61 阅读 · 0 评论 -
leetcode35 搜索插入位置 简单
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0二分查找cla...原创 2019-07-19 10:50:16 · 59 阅读 · 0 评论 -
leetcode207 课程表 中等
现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 ...原创 2019-07-16 14:55:00 · 237 阅读 · 0 评论 -
leetcode199 二叉树的右视图 中等
思路宽搜,层次遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *...原创 2019-07-14 15:37:32 · 78 阅读 · 0 评论 -
leetcode78子集 中等
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]思路要列出数组的所有子集,因为数组是不含重复元素的,所以对于每一个位置的数字,有两个选择,选或者不选。可以画出以下的递归树:...原创 2019-06-20 09:35:27 · 99 阅读 · 0 评论 -
leetcode206反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路头插法,每次从原本的链表中获得一个节点,将次节点头插法插入ListNode* retHead中/** * Definition for singly-linked list. * struct ListNo...原创 2019-06-04 10:00:29 · 78 阅读 · 0 评论 -
leetcode94二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2](左根右)1.若其左孩子不为空,则将p入栈并将p的左孩子置为当前的p,然后对当前结点p再进行相同的处理;2.若其左孩子为空,则取栈顶元素(根)并进行出栈操作(没有左,则弹根),访问该栈顶结点,然后将栈顶结点的右孩子置为当前的p(对右边的子树作为root进行相同的操作)3....原创 2019-05-11 23:12:37 · 73 阅读 · 0 评论 -
leetcode145二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]12/3输出: [3,2,1]迭代:(与前序遍历相反,得到根之后,左节点先入栈,右节点后入栈,再将结果反转)(左右根)1、把根节点push到栈中2、循环检测栈是否为空,若不空,则取出栈顶元素,保存其值(根)3、看其左子节点是否存在,若存在则push到栈中(先放入左节点,后面再处理)4、看其右子节...原创 2019-05-11 23:06:44 · 86 阅读 · 0 评论 -
leetcode144二叉树的前序遍历
给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,2,3]迭代:/*(中左右)1、把根节点push到栈中2、循环检测栈是否为空,若不空,则取出栈顶元素,保存其值(根)3、看其右子节点是否存在,若存在则push到栈中(先放入右节点,后面再处理)4、看其左子节点,若存在,则push到栈中(放入左节点,得到左)5、循环*/...原创 2019-05-11 23:03:11 · 126 阅读 · 0 评论 -
leetcode409最长回文串
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:“abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。思路回文串,即左右两边逆序相等当某个字符有偶数个的时候,两边各放...原创 2019-05-25 10:20:49 · 112 阅读 · 0 评论 -
leetcode139单词拆分
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成...原创 2019-05-24 23:02:27 · 112 阅读 · 0 评论 -
leetcode454四数之和
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。例如:输入:A = [ 1, 2]...原创 2019-05-21 09:42:09 · 197 阅读 · 0 评论 -
leetcode350两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。思路:1、遍历 num1...原创 2019-05-21 09:06:52 · 71 阅读 · 0 评论 -
leetcode15三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路:1、排除三个数都为0的情况,也...原创 2019-05-20 12:31:38 · 62 阅读 · 0 评论 -
leetcoe101对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:分别传入根的左右节点(两棵子树):1、 先判断是否同时为空2、 若不为空,则判断值是否相同3、 且判断它的子树的情况(两棵子树都有左右两个节点)即1子树的左节点=2子树的右节点,1子树的右节点=2子树的左节点...原创 2019-05-14 22:32:07 · 101 阅读 · 0 评论