
Leetcode 题解 - JAVA
个人刷 Leetcode 题解分享,使用 Java 代码实现
Kealina
一只3年工作经验的JAVA程序媛,在这个做自己力所能及的分享。
写博客重要的目的是记录自己的成长,如果顺便帮助了他人,那也是极好的。
展开
-
Leetcode208. 实现Trie(前缀树)[Med] -JAVA
题目传送门@[TOC](Leetcode208. 实现Trie(前缀树)[Med] -JAVA)题目实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.startsWith(“app”); //原创 2020-06-24 09:10:24 · 124 阅读 · 0 评论 -
Leetcode1014. 最佳观光组合[Med] -JAVA
题目传送门Leetcode1014. 最佳观光组合[Med] -JAVA题目思路解法枚举题目给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。示例:输入:[8,1,5,2,6]输出:11解释:i = 0, j = 2, A[i] + A[j] + i - j = 8原创 2020-06-17 18:11:37 · 223 阅读 · 0 评论 -
Leetcode452. 用最少数的箭引爆气球[Med] -JAVA
题目传送门Leetcode452. 用最少数的箭引爆气球[Med] -JAVA题目思路解法题目在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤x ≤ xend,则该气球会被原创 2020-06-11 13:00:53 · 217 阅读 · 0 评论 -
Leetcode739. 每日温度[Med] -JAVA
题目传送门Leetcode739. 每日温度[Med] -JAVA题目思路解法暴力单调栈题目根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是原创 2020-06-11 12:46:56 · 175 阅读 · 0 评论 -
Leetcode面试题29. 顺时针打印矩阵[Easy] -JAVA
面试题29. 顺时针打印矩阵https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,1原创 2020-06-10 09:42:02 · 178 阅读 · 0 评论 -
Leetcode406. 根据身高重建队列[Med] -JAVA
题目传送门Leetcode406根据身高重建队列[Med] -JAVA题目思路解法贪心算法题目假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(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], [7,1]]思路k是排原创 2020-06-09 14:08:32 · 722 阅读 · 0 评论 -
Leetcode238. 除自身以外数组的乘积[Med] -JAVA
题目传送门Leetcode238. 除自身以外数组的乘积[Med] -JAVA题目思路解法左右乘积列表题目给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时原创 2020-06-04 23:56:46 · 265 阅读 · 0 评论 -
Leetcode面试题64. 求1+2+…+n[Med] -JAVA
题目传送门Leetcode面试题64. 求1+2+…+n[Med] -JAVA题目思路解法短路法题目思路求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000解法短路法例:A&&B ,当A 等于false时,B不会执行,则B被短路A||B 当原创 2020-06-02 19:42:55 · 169 阅读 · 0 评论 -
Leetcode145 二叉树的后序遍历[Hard] -JAVA
题目传送门Leetcode145 二叉树的后序遍历[Hard] -JAVA题目思路解法递归迭代题目给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?Related Topics 栈 树思路后序遍历:左-右-中题目也说了递归很简单,使用一个DFS(深度优先遍历),分别按左右中,加到结果列表里。我相信你也可以写得出来。那么如何用迭代实现呢?什么是迭原创 2020-05-30 20:42:06 · 167 阅读 · 0 评论 -
Leetcode141 环形链表[Easy] -JAVA
题目传送门Leetcode141 环形链表[Easy] -JAVA题目思路解法题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。思路判断链接是否有环,使用Floyd判圈算法。使用双指针,一慢一快,慢的每次走一步,快的每次走两步,当有原创 2020-05-27 21:57:09 · 173 阅读 · 0 评论 -
Leetcode103 二叉树的锯齿形层次遍历[Med] -JAVA
题目传送门Leetcode103 二叉树的锯齿形层次遍历[Med] -JAVA题目思路解法题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3/ 9 20/ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]Related Topics 栈 树 广度优先搜索思路题意就是用中序遍历实现,将左边的节点全部原创 2020-05-26 18:47:58 · 143 阅读 · 0 评论 -
Leetcode146 LRU缓存机制[Med] -JAVA
题目传送门Leetcode146 LRU缓存机制[Med] -JAVA题目思路解法题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数原创 2020-05-25 23:37:26 · 159 阅读 · 0 评论 -
Leetcode897 递增顺序查找树[Easy] -JAVA
题目传送门Leetcode897 递增顺序查找树[Easy] -JAVA题目思路解法题目给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :输入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9输出:[1,null,2,nu原创 2020-05-25 23:37:46 · 142 阅读 · 0 评论 -
Leetcode240 搜索二维矩阵 II[Med] -JAVA
题目传送门240. 搜索二维矩阵 II[Mid] -JAVA题目思路解法题目编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 2原创 2020-05-21 22:28:17 · 150 阅读 · 0 评论 -
Leetcode25 K 个一组翻转链表 [Hard] -JAVA
题目传送门Leetcode25. K 个一组翻转链表[Hard] -JAVA题目思路解法题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4-原创 2020-05-17 19:01:40 · 189 阅读 · 0 评论 -
Leetcode541 反转字符串 II [Easy] -JAVA
题目传送门Leetcode541. 反转字符串 II -JAVA题目思路解法双指针题目给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例:输入: s = “abcdefg”, k = 2输出: “bacdfeg”思路首先考虑到String 是不可变得,我们转化为数组,原地交换就可以了。如何交换?原创 2020-05-15 22:21:38 · 553 阅读 · 0 评论 -
Leetcode136 只出现一次的数字 [Easy] - JAVA
题目传送门Leetcode. 136. 只出现一次的数字- JAVA题目解法位运算(异或^)思路代码题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1解法位运算(异或^)思路位运算:(异或)如果a、b两个值...原创 2020-05-02 08:45:00 · 166 阅读 · 0 评论 -
Leetcode面试题 16.17. 连续数列 - JAVA
题目传送门Leetcode. 面试题 16.17. 连续数列 - JAVA题目解法动态规划(DP)思路代码题目给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解法动态规划(DP)思路用一个数组来存储每次每个位置的最大值,每个位...原创 2020-04-26 19:26:02 · 416 阅读 · 0 评论 -
Leetcode199 二叉树的右视图 - JAVA
题目传送门Leetcode.199 二叉树的右视图 - JAVA题目解法BFS 解法思路代码题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <---...原创 2020-04-23 00:05:35 · 327 阅读 · 0 评论 -
Leetcode200 岛屿数量 - JAVA
题目传送门Leetcode200 岛屿数量 - JAVA题目思路DFS 解法题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围示例 1:输入:1 1 1 1 01 1 0 1 01 1 0 0 00 ...原创 2020-04-20 22:39:20 · 204 阅读 · 0 评论