
热题 HOT 100
热题 HOT 100 刷题笔记
dev_zyx
talk is cheap, show me code!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
739. 每日温度
题目:739. 每日温度题解:1. 题解一:暴力求解代码:1. 代码一:暴力求解public class code739 { // 解法1: 暴力求解 public static int[] dailyTemperatures(int[] T) { int len = T.length; int res[] = new int[len]; for(int i = 0; i < len; i++) {原创 2020-08-30 23:31:01 · 235 阅读 · 0 评论 -
647. 回文子串
题目:647. 回文子串题解:5. 最长回文子串1. 题解一:中心扩展算法解释一:解释二:解释三:代码:1. 代码一:中心扩展算法public class code647 { // 解法1: 中心扩展算法 public int num = 0; public int countSubstrings(String s) { for(int i = 0; i < s.length(); i++) {原创 2020-08-30 18:40:06 · 211 阅读 · 0 评论 -
621. 任务调度器
题目:621. 任务调度器题解:代码:import java.util.Arrays;public class code621 { public static int leastInterval(char[] tasks, int n) { int count[] = new int[26]; // 统计词频 for(int i = 0; i < tasks.length; i++) {原创 2020-08-30 17:38:42 · 313 阅读 · 0 评论 -
617. 合并二叉树
题目:617. 合并二叉树题解:1. 题解一:递归法2. 题解二:迭代法代码:1. 代码一:递归法import java.util.*;public class code617 { // 解法1: 递归法 /** * 思想:将一棵树t2,合并到另一棵树t1 * 递归公式:合并当前节点 + 合并左子树 + 合并右子树 * 终止条件:t1或t1的节点为空 * */ public static TreeNod原创 2020-08-30 12:38:45 · 261 阅读 · 0 评论 -
581. 最短无序连续子数组
题目:581. 最短无序连续子数组题解:1. 解释一:2. 解释二:3. 解释三:4.解释四:代码:public class code581 { public static int findUnsortedSubarray(int[] nums) { int len = nums.length; if(len <= 1) { return 0; } int l原创 2020-08-30 01:44:32 · 243 阅读 · 0 评论 -
560. 和为K的子数组
题目:560. 和为K的子数组题解:1. 题解一:暴力枚举2. 题解二:前缀和 + 哈希表优化代码:1. 代码一:暴力枚举public class code560 { // 方法一: 暴力枚举 public int subarraySum(int[] nums, int k) { int count = 0; for (int i = 0; i < nums.length; i++) {原创 2020-08-29 20:10:49 · 265 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
题目:538. 把二叉搜索树转换为累加树题解:1. 题解一:递归法2. 题解二:迭代法代码:1. 代码一:递归法public class code538 { // 方法1: 递归法 public int sum = 0; public TreeNode convertBST(TreeNode root) { if(root == null) { return null; }原创 2020-08-28 23:58:24 · 582 阅读 · 0 评论 -
494. 目标和
题目:494. 目标和题解:1. 题解一:DFS枚举2. 题解二:动态规划代码:1. 代码一:DFS枚举public class code494 { // 方法一: DFS枚举 public int count = 0; public int findTargetSumWays(int[] nums, int S) { dfs(nums, S, 0, 0); return count; } publ原创 2020-08-28 23:39:50 · 279 阅读 · 0 评论 -
461. 汉明距离
题目:461. 汉明距离题解:然后紧接着是:面试题15. 二进制中1的个数代码:public class code461 {// // 方法一: 内置位计数功能// public static int hammingDistance(int x, int y) {// return Integer.bitCount(x ^ y);// }// // 方法二: 使用toBinaryString函数// public static in原创 2020-08-28 23:16:53 · 335 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
题目:448. 找到所有数组中消失的数字题解:1. 题解一:使用哈希表2. 题解二:原地修改/** * * 找出 1 - n 中没有出现的数字。不能使用额外的空间,两次循环时间复杂度为 2O(n),即为 O(n)。 * * 解题思路:使用数组的下标来标记数字的出现于否,通过一遍遍历即可标记出全部已经出现的数组 * * [4,3,2,7,8,2,3,1] 初始数据 * * [4,3,2,-7,8,2,3,1] 第一个数据 4 出现,将数组的第四个也就是下标 3 的数据修改为负原创 2020-08-28 23:03:19 · 506 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
题目:438. 找到字符串中所有字母异位词题解:滑动窗口参考:3. 无重复字符的最长子串滑动窗口,具体思路见代码。代码:滑动窗口import java.util.*;public class code438 { public static List<Integer> findAnagrams(String s, String p) { // 用于返回字母异位词的起始索引 List<Integer> res = new原创 2020-08-28 22:46:03 · 272 阅读 · 0 评论 -
437. 路径总和 III
题目:437. 路径总和 III题解:1. 题解一:双重递归2. 题解二:前缀和核心代码:// 当前路径上的和currSum += node.val;// currSum-target相当于找路径的起点,起点的sum+target=currSum,当前点到起点的距离就是targetres += prefixSumCount.getOrDefault(currSum - target, 0);// 更新路径上当前节点前缀和的个数prefixSumCount.put(currS原创 2020-08-27 23:13:05 · 235 阅读 · 0 评论 -
416. 分割等和子集
题目:416. 分割等和子集题解:代码:public class code416 { public static boolean canPartition(int[] nums) { int len = nums.length; if(len == 0) { return false; } int sum = 0; for(int i = 0; i < l原创 2020-08-27 22:40:43 · 184 阅读 · 0 评论 -
399. 除法求值
题目:399. 除法求值题解:并查集代码:并查集import java.util.*;public class code399 { /** * key : 当前节点 value : 其父节点 */ private Map<String, String> parents = new HashMap<>(); /** * key : 当前节点 value : 父节点/当前节点 */原创 2020-08-17 22:34:57 · 283 阅读 · 0 评论 -
394. 字符串解码
题目:394. 字符串解码题解:1. 如果遇到 ']',就一直在栈中找到 '[',将之间的字符连接起来,然后将 '['前面的数字作为出现次数,并将之前的 string 连接起来,再次压栈;2. 如果遇到数字、字母、'['就直接压栈;3. 最后将栈里的字符串弹出,并连接起来就ok了;代码:import java.util.*;public class code394 { // 1. 如果遇到 ']',就一直在栈中找到 '[',将之间的字符连接起来,然后将 '['前面的数字作为出原创 2020-08-16 13:08:26 · 334 阅读 · 0 评论 -
347. 前 K 个高频元素
题目:347. 前 K 个高频元素题解:215. 数组中的第K个最大元素什么是Java优先级队列(Priority Queue)?1. 题解一:最小堆2. 题解二:桶排序法(首选)代码:1. 代码一:最小堆import java.util.*;public class code347 { // 解法1:最小堆 public static int[] topKFrequent(int[] nums, int k) { // 使原创 2020-08-15 01:57:22 · 288 阅读 · 0 评论 -
338. 比特位计数
题目:338. 比特位计数题解:解释一:解释二:解释三:解释四:1. 题解一:动态规划 + 最低有效位2. 题解二:动态规划 + 最后设置位代码:1. 代码一:动态规划 + 最低有效位import java.util.*;public class code338 { // 方法1: 动态规划 + 最低有效位 public static int[] countBits(int num) { int res[] = new int原创 2020-08-12 22:02:44 · 305 阅读 · 0 评论 -
337. 打家劫舍 III
题目:337. 打家劫舍 III题解:1. 解释一:root[0] = Math.max(rob(root.left)[0], rob(root.left)[1]) + Math.max(rob(root.right)[0], rob(root.right)[1])root[1] = rob(root.left)[0] + rob(root.right)[0] + root.val;2. 解释二:3. 解释三:代码:public class code337 { //原创 2020-08-11 22:46:38 · 244 阅读 · 0 评论 -
309. 最佳买卖股票时机含冷冻期
题目:309. 最佳买卖股票时机含冷冻期题解:动态规划代码:动态规划public class code309 { public static int maxProfit(int[] prices) { if(prices.length == 0) { return 0; } int n = prices.length; // dp[i][0]: 手上持有股票的最大收益原创 2020-08-09 13:32:56 · 208 阅读 · 0 评论 -
287. 寻找重复数
题目:287. 寻找重复数题解:142. 环形链表 II1. 解释一:2. 解释二:代码:public class code287 { public static int findDuplicate(int[] nums) { int slow = 0; int fast = 0; slow = nums[slow]; fast = nums[nums[fast]]; // 第一步找到相遇点原创 2020-08-08 19:18:02 · 243 阅读 · 0 评论 -
283. 移动零
题目:283. 移动零题解:1. 题解一:两次遍历解题思路:遍历数组,不为0的元素移到数组前方,用index下标记录。遍历结束,对index值后的元素统一设为02. 题解二:一次遍历解题思路:直接在遍历的时候,进行元素覆盖即可,并把原来的值设为0代码:1. 代码一:两次遍历public class code283 { // 方法1:两次遍历 public static void moveZeroes(int[] nums) { int inde原创 2020-08-08 00:30:59 · 241 阅读 · 0 评论 -
279. 完全平方数
题目:279. 完全平方数题解:代码:import java.util.*;public class code279 { // 判断是否是[完全]平方数 public static boolean isSquare(int n) { int sqrt = (int) Math.sqrt(n); return sqrt * sqrt == n; } public static int numS原创 2020-08-07 00:30:55 · 327 阅读 · 0 评论 -
238. 除自身以外数组的乘积
题目:238. 除自身以外数组的乘积剑指 Offer 66. 构建乘积数组题解:剑指 Offer 66. 构建乘积数组代码:public class code238 { // // 方法1:左右数组 // public static int[] productExceptSelf(int[] nums) { // if(nums == null || nums.length == 0) // { // return原创 2020-08-06 00:28:58 · 267 阅读 · 0 评论 -
234. 回文链表
题目:234. 回文链表题解:1. 题解一:快指针走到末尾,慢指针刚好到中间,其中慢指针将前半部分反转,然后比较反转后的前半部分与原来的后半部分是否相同。2. 题解二:其一,find mid node 使用快慢指针找到链表中点。 其二,reverse 逆序后半部分。 其三,check 从头、中点,开始比较是否相同。偶数节点情况:奇数节点情况:代码:1. 代码一:public class code234 { public static boolean isPali原创 2020-08-05 00:30:12 · 240 阅读 · 0 评论 -
221. 最大正方形
题目:221. 最大正方形题解:代码:public class code221 { public static int maximalSquare(char[][] matrix) { // base condition if(matrix == null || matrix.length == 0 || matrix[0].length == 0) { return 0; }原创 2020-08-03 23:56:06 · 261 阅读 · 0 评论 -
215. 数组中的第K个最大元素
题目:215. 数组中的第K个最大元素题解:1. 题解一:暴力解法2. 题解二:使用最小堆(采用优先队列实现)3. 题解三:基于快速排序的选择方法代码:1. 代码一:暴力解法// 方法1:暴力解法public static int findKthLargest(int[] nums, int k) { int len = nums.length; Arrays.sort(nums); return nums[len - k];}2. 代码二:使用最小堆(原创 2020-07-08 21:31:45 · 403 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
题目:208. 实现 Trie (前缀树)题解:1. 定义类 TrieNodeclass TrieNode{ private boolean isEnd; //该结点是否是一个串的结束 TrieNode next[]; //字母映射表 next public TrieNode() { isEnd = false; next = new TrieNode[26]; }}2. 插入原创 2020-07-07 21:12:53 · 267 阅读 · 0 评论 -
207. 课程表
题目:207. 课程表题解:广度优先搜索无向图及其邻接表:有向图及其邻接表:1. 解释一:2. 解释二:代码:广度优先搜索import java.util.*;public class code207 { // 边缘列表 prerequisites 【后置结点,前置结点】 public static boolean canFinish(int numCourses, int[][] prerequisites) { int i原创 2020-07-06 22:16:33 · 364 阅读 · 0 评论 -
198. 打家劫舍
题目:198. 打家劫舍题解:代码:public class code198 { public static int rob(int[] nums) { if(nums == null || nums.length == 0) { return 0; } int len = nums.length; if(len == 1) { retur原创 2020-07-03 10:51:49 · 279 阅读 · 0 评论 -
152. 乘积最大子数组
题目:152. 乘积最大子数组题解:1. 题解一:public int maxProduct(int[] nums) { if (nums.length == 0) { return 0; } if (nums.length == 1) { return nums[0]; } int max_even = 1; boolean flag = false; boolean update = false;原创 2020-07-02 20:30:37 · 282 阅读 · 0 评论 -
148. 排序链表
题目:148. 排序链表题解:代码:public class code148 { // 自顶向下 public static ListNode sortList(ListNode head) { // 1、递归结束条件 // 当链表为空或者链表只剩下一个结点时,直接返回 head if(head == null || head.next == null) { return head;原创 2020-07-01 11:34:47 · 340 阅读 · 0 评论 -
146. LRU缓存机制
题目:146. LRU缓存机制题解:1. 题解一:使用LinkedHashMap实现2. 题解二:使用双向链表结构+HashMap实现0. 解题思路:1. 解释一:2. 解释二:(主要思路)/* 缓存容量为 2 */LRUCache cache = new LRUCache(2);// 你可以把 cache 理解成一个队列// 假设左边是队头,右边是队尾// 最近使用的排在队头,久未使用的排在队尾// 圆括号表示键值对 (key, val)cache.p原创 2020-06-29 20:45:22 · 291 阅读 · 0 评论 -
139. 单词拆分
题目:139. 单词拆分题解:解释一:解释二:/* 动态规划算法,dp[i]表示s前i个字符能否拆分 转移方程:dp[j] = dp[i] && check(s[i+1, j]); check(s[i+1, j])就是判断i+1到j这一段字符是否能够拆分 其实,调整遍历顺序,这等价于s[i+1, j]是否是wordDict中的元素 这个举个例子就很容易理解。 假如wordDict=["apple", "pen", "code原创 2020-06-28 12:42:32 · 297 阅读 · 0 评论