自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 LeetCode-Sort&Array-56-M:合并区间(Merge Intervals)

文章目录思路解法给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].思路(1)首先排好二维数组,表达式还不会Arrays.sort(intervals, (i1, i2) -> Int...

2020-01-31 21:15:15 192

原创 LeetCode-Greedy-134-M:加油站

文章目录思路解法在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。输入:gas = [1,2,3,4,5]cost = [3,4,5,1,2]...

2020-01-31 19:28:13 134

原创 LeetCode-Greedy-122-E:买卖股票的最佳时机II

文章目录思路解法给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖...

2020-01-31 12:41:24 168

原创 LeetCode-Greedy&Array-55-M:跳跃游戏

文章目录思路解法1-清奇给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。思路官方题解这是一个动态规划问题,通常解决并理解一个动态规划问题需要以...

2020-01-31 08:58:55 274

原创 LeetCode-Greedy-44-H:通配符匹配

文章目录思路解法给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘’ 的通配符匹配。‘?’ 可以匹配任何单个字符。'’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。思路wait解法...

2020-01-31 08:28:38 173

原创 LeetCode-Heap-378-M:有序矩阵中第K小的元素

文章目录思路解法-二分给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。示例:matrix = [[ 1, 5, 9],[10, 11, 13],[12, 13, 15]],k = 8,返回 13。思路https://leetcode-cn.com/problems/kth-smal...

2020-01-30 23:58:28 165

原创 LeetCode-Heap-347-M:前 K 个高频元素

文章目录思路解法1给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]思路(1)借助 哈希表 来建立数字和其出现次数的映射,遍历一遍数组统计元素的频率(2)维护一个元素数目为 k的最小堆(3)每次都将新的元素与堆顶元素(堆中频率最小的元素)进行比较(4)如果新的元素的频率比堆顶端...

2020-01-30 23:47:52 179

原创 LeetCode-Heap-295-H:数据流的中位数

文章目录思路-wait解法中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。...

2020-01-30 23:18:55 109

原创 LeetCode-Heap-239-H:滑动窗口最大值

文章目录思路解法1-暴力解法2-双向队列思路解法1-暴力class Solution { public int[] maxSlidingWindow(int[] nums, int k) { //attention if(nums.length==0){ return new int[0]; } ...

2020-01-30 22:51:32 158

原创 LeetCode-Heap-218-H:天际线问题

文章目录思路解法1-扫描城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线(图B)。每个建筑物的几何信息用三元组 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分别是第 i 座建筑物左右边缘的 x 坐标,Hi 是其高度。可以保证 0 ≤ Li, Ri ≤ INT...

2020-01-30 20:22:00 233

原创 LeetCode-Heap-215-M: 数组中的第K个最大元素

文章目录思路解法1-冒泡解法2-Arrays.sort()解法3-堆在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。思路(1)在不考虑堆的情况下,冒泡排序。效果很差。解法1-冒泡执行用时 :196 ms, 在所有 Java 提交中击败了5.03%的用户内存消耗 :37.8 MB, 在所有 Java 提交中击败...

2020-01-29 19:32:38 113

原创 LeetCode-Stack-341-M: 扁平化嵌套列表迭代器

文章目录思路解法1-递归解法2-栈给定一个嵌套的整型列表。设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的项或者为一个整数,或者是另一个列表。输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回false,next 返回的元素的顺序应该是: [1,1,2,1,1]。思路https://lee...

2020-01-29 15:43:51 106

原创 LeetCode-Stack-155-E:最小栈(Min Stack)

文章目录思路解法1-两个栈解法2-一个栈+变量解法3-一个栈+差值设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。思路参考:https://leetcode-cn.com/problems/min-st...

2020-01-28 21:24:15 204

原创 LeetCode-Stack-150-M:逆波兰表达式求值

文章目录思路解法根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: ((2 + 1) * 3) = 9...

2020-01-28 12:11:30 97

原创 LeetCode-Stack&Array-84-H:柱状图中最大的矩形

文章目录思路解法-wait给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。输入: [2,1,5,6,2,3]输出: 10https://leetcode-cn.com/problems/largest-rectangle-in-histogram/思路解法-wait...

2020-01-28 11:55:50 268

原创 LeetCode-Stack-42-H:接雨水

文章目录思路解法给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6https://leetcode...

2020-01-28 11:52:06 156

原创 LeetCode-Stack-20-E:有效的括号

文章目录思路解法1-栈解法2-same 9 years education, why are u outstanding ?解法3-思路清奇给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路解法1-栈执行用时 :3 ms...

2020-01-22 21:50:27 114

原创 LeetCode-Tree-297-H:二叉树的序列化与反序列化

文章目录思路解法序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。说明: 不要使用类的成员...

2020-01-22 16:32:22 97

原创 LeetCode-Tree-236-M: 二叉树的最近公共祖先

文章目录思路解法给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节...

2020-01-22 16:20:28 111

原创 LeetCode-Tree-230-M:二叉搜索树中第K小的元素

文章目录思路解法给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。思路(1)最初想的是存到链表中,比较大小来取得。(2)发现用链表的中序遍历即可。(3)最初k1用的就是k,在递归中使用,发现输出一直不对。因为在递归第一层记录的k值,底层递归时虽然发生了改变,但是并没有影响上层,...

2020-01-22 11:50:09 113

原创 LeetCode-Tree&DFS-124-H:二叉树中的最大路径和(Binary Tree Maximum Path Sum)

文章目录思路解法-参考给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。思路https://leetcode.com/problems/binary-tree-maximum-path-sum/discuss/39775/Accepted-short-solution-in-Java解法-...

2020-01-21 21:42:37 165

原创 LeetCode-Tree&DFS-116-M: 填充每个节点的下一个右侧节点指针(Populating Next Right Pointers in Each Node)

文章目录思路解法1-两个队列解法2-优化 -wait给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为...

2020-01-21 17:05:20 113

原创 LeetCode-Tree-108-E: 将有序数组转换为二叉搜索树

文章目录思路解法将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。思路(1)即按照最平衡的思路,取最中间的作为根节点。神奇的是测试用例输出还不一致 :)解法执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗 :36.1 MB, 在所有 Java 提...

2020-01-21 16:20:44 100

原创 LeetCode-Tree-105-M: 从前序与中序遍历序列构造二叉树

文章目录思路解法1根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。思路(1)参见剑指Offer-树-面试题7:重建二叉树解法1执行用时 :22 ms, 在所有 Java 提交中击败了12.68%的用户内存消耗 :43.5 MB, 在所有 Java 提交中击败了10.24%的用户class Solution { public TreeNode...

2020-01-21 11:46:51 111

原创 LeetCode-Tree&DFS-104-E:二叉树的最大深度

文章目录思路解法思路(1)参见 剑指Offer-树-面试题55-1:二叉树的深度。(2)之前没有理解到位每个结点是怎么进行长度计算的,说到底还是对树形结构的递归不通透。解法执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗 :38.7 MB, 在所有 Java 提交中击败了15.61%的用户class Solution { public...

2020-01-21 10:48:51 168

原创 LeetCode-Tree&BFS-103-M:二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)

文章目录思路解法给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。思路(1)在LeetCode-Tree-102-M:二叉树的层次遍历的基础上对偶数行进行处理。(2)另外参见剑指Offer-树-面试题32-3:按之字形顺序打印二叉树,不同的解法。借用了栈的处理。解法执行用时 :2 ms, 在所有 Java 提交中击...

2020-01-20 20:22:42 155

原创 LeetCode-Tree&BFS-102-M:二叉树的层次遍历(Binary Tree Level Order Traversal)

文章目录思路解法1-两个队列解法2-优化 wait给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。思路(1)借用两个队列来交替完成,不够优化。参见剑指Offer-树-面试题32-2:分行从上到下打印二叉树。(2)注意点:1)第一个结点的处理。可以统一在后面添加到链表中,这里用queue2封装第一个结点。2)后续小链表添加值怎么处理。写在后面的while循...

2020-01-20 17:51:04 161

原创 LeetCode-Tree&DFS-101-E:对称二叉树(Symmetric Tree)

文章目录思路解法思路(1)巧妙的思路在于将第三代的子树的左右子树重新定义了左右这个概念。(2)判断false , return right==null;(3)另参见 剑指Offer-树-面试题28:对称的二叉树解法执行用时 :1 ms, 在所有 Java 提交中击败了54.54%的用户内存消耗 :38.8 MB, 在所有 Java 提交中击败了6.60%的用户class Sol...

2020-01-20 16:40:35 113

原创 LeetCode-Tree&DFS-98-M:验证二叉搜索树 (Validate Binary Search Tree)

文章目录思路解法1-AC解法2解法3给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路(1)参考前面的中序遍历的思路,按照顺序先存储下所有的结点值,再进行比较。不够优化。(2)在之前的基础上,不用整体保存,只需要比较前后两个,因此可以...

2020-01-20 12:32:37 117

原创 LeetCode-Tree-94-M:二叉树的中序遍历

文章目录思路解法1-递归解法2-莫里斯中序遍历解法3-栈给定一个二叉树,返回它的中序遍历。进阶: 递归算法很简单,你可以通过迭代算法完成吗?思路(1)不可否认,中序遍历用递归写确实是一个很简单的,但在过程中还是有一点值得注意的。抓住递归过程才是关键,见下图分析。解法1-递归执行用时 :1 ms, 在所有 Java 提交中击败了73.21%的用户内存消耗 :35.1 MB, 在所有...

2020-01-20 11:53:41 134

原创 LeetCode-Linked List-23-H:合并K个排序链表

文章目录思路解法1-AC解法2-wait合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。思路(1)普通的暴力解法。没有什么思路,遍历一遍过去的时间复杂度,两个依次比较、合并。解法1-AC执行用时 :131 ms, 在所有 Java 提交中击败了27.09%的用户内存消耗 :56.9 MB, 在所有 Java 提交中击败了14.42%的用户class Solu...

2020-01-19 16:25:41 143

原创 LeetCode-Linked List-2-M:两数相加

文章目录思路解法1-大数溢出解法2-wait给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。(逆序返回)输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因...

2020-01-19 11:31:37 167

原创 LeetCode-Linked List-19-M: 删除链表的倒数第N个节点

文章目录思路解法1-AC解法2-虚拟头结点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路(1)保证了除了删除尾节点这种情况...

2020-01-18 21:34:21 152

原创 LeetCode-Linked List-138-M: 复制带随机指针的链表

文章目录思路解法给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何...

2020-01-18 21:12:49 100

原创 LeetCode-Linked List-328-M:奇偶链表

文章目录思路解法1-AC解法2给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。思路(1)普通解法。未实现O(1)的空间复杂度。(2)空间复杂度应为 O(1),时间复杂度应为 O(nod...

2020-01-18 16:03:56 212

原创 LeetCode-Linked List-148-M:排序链表

文章目录思路解法1-递归的归并排序-AC在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。思路(1)递归解法。1)首先利用快慢指针定位到中间位置,直接遍历过去。2)两个链表一直往下层递归一直到递归终止条件结束。3)一层层的合并两个排序好的链表。4)返回结点。解法1-递归的归并排序-ACclass Solution { public ListNode...

2020-01-18 15:11:53 78

原创 LeetCode-Linked List-234-E:回文链表

文章目录思路解法1解法2-进阶请判断一个链表是否为回文链表。(对称链表)思路(1)借助了一个数组ArrayList,遍历存储链表的结点,然后再去两边同时取值比较。(2)进阶:用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题。解法1class Solution { public boolean isPalindrome(ListNode head) { i...

2020-01-17 21:14:42 118

原创 LeetCode-Linked List-141-E:环形链表

文章目录思路解法1-快慢指针-AC解法2-哈希-AC给定一个链表,判断链表中是否有环。思路(1)快慢指针法。最初的写法一直过不了,关于链表结点空指针的问题。(2)哈希表。比较巧妙。解法1-快慢指针-ACpublic class Solution { public boolean hasCycle(ListNode head) { if(head == null...

2020-01-17 14:38:09 135

原创 LeetCode-Linked List-160-E:相交链表

文章目录思路解法-AC编写一个程序,找到两个单链表相交的起始节点。思路(1)参见剑指Offer-链表-面试题52:两个链表的第一个公共结点。(2)指针归位又忘记了。解法-ACpublic class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { i...

2020-01-17 12:35:20 101

原创 LeetCode-Linked List-21-E:合并两个有序链表(Merge Two Sorted Lists)

文章目录思路解法-AC将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路(1)一次只抓住一个结点。动了之后移动指针。参见剑指Offer-链表-面试题25:合并两个排序的链表(2)error1:忽略了长短链表的之后指针没变动,应该直接return 链表。解法-ACclass Solution { public ListNode mer...

2020-01-17 12:01:31 129

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除