130. 被围绕的区域 题目:130. 被围绕的区域题解:DFS + 沉岛思想1. 解释一:2. 解释二:3. 解释三:代码:DFS + 沉岛思想public class code130 { // 思路: DFS + 沉岛思想 // 步骤1:对于每一个边界上的 O,我们以它为起点,标记所有与它直接或间接相连的字母'O'为'M' // 步骤2:最后我们遍历这个矩阵,替换'M'为'O','O'为'X' int m = 0; // 行数 int n = 0; // 列
N进制加法 思路:根据十进制加法的原理,我们实现N进制的加法。依旧是从末位开始逐位相加,并累加进位。代码:import java.util.*;public class N进制加法 { static String addByBase(String a, String b, int base) { StringBuffer ans = new StringBuffer(); int n = Math.max(a.length(), b.length()), car
Comparator接口(比较器)的Java8 Lambda表达式写法: 知识点:o1 - o2 是升序排序,o2 - o1 是降序排序。1. 一维数组的比较:// o1 - o2 是升序排序,o2 - o1 是降序排序。// 1. 方法1:Arrays.sort(intervals, (a, b) -> a[0] - b[0]);// 2. 方法2:Arrays.sort(intervals, new Comparator<int[]>() { @Override public int compare(int o1[], in
124. 二叉树中的最大路径和 题目:124. 二叉树中的最大路径和[编程题]二叉树的最大路径和题解:代码:public class code124 { int maxValue; public int maxPathSum(TreeNode root) { maxValue = Integer.MIN_VALUE; maxPathDown(root); return maxValue; } /** * 返回经过 node 的单
手写线程池 1. 先定义一个保存任务的队列类,同时提供获取任务和添加任务的方法:// 1. 先定义一个保存任务的队列类,同时提供获取任务和添加任务的方法package com.company;import java.util.*;public class RunnableTaskQueue { /** * 定义一个LinkedList来做为存放任务的队列 */ private final LinkedList<Runnable> tasks = new Li
手写单例模式 1. 静态内部类实现单例(线程安全、效率高)一。静态内部类实现:这种方式是 Singleton 类被装载了, instance 不一定被初始化。因为 SingletonHolder 类没有被主动使用,只有通过显示调用 getInstance 方法时,才会显示装载 SingletonHolder 类,从而实例化 instance 。注意内部类SingletonHolder要用static修饰且其中的静态变量INSTANCE必须是final的。public class Singleton {
145. 二叉树的后序遍历 题目:145. 二叉树的后序遍历题解:1. 题解一:递归后序遍历第一种解决方法是使用递归。这是经典的方法,直截了当。我们可以定义一个辅助函数来实现递归。2. 题解二:迭代后序遍历代码:1. 代码一:递归后序遍历/** * code145 */import java.util.*;public class code145 { // 解法一:递归 public static List<Integer> postorderTraversal(Tree
144. 二叉树的前序遍历 题目:144. 二叉树的前序遍历题解:1. 题解一:递归前序遍历第一种解决方法是使用递归。这是经典的方法,直截了当。我们可以定义一个辅助函数来实现递归。2. 题解二:迭代前序遍历代码:1. 代码一:递归前序遍历/** * code144 */import java.util.*;public class code144 { // 解法一:递归 public static List<Integer> preorderTraversal(TreeN
Java中如何遍历Map对象的4种方法 在Java中如何遍历Map对象How to Iterate Over a Map in Java在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等) 方法一 在for-each循环中使用entries来遍历这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。Map<Int.
9.20 度小满笔试 1. 第一题:题目:1. 代码一:import java.util.*;public class Main1_1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); // 小A手上的颜料 String t = sc.next(); // 画画需要的燃料 Map<Cha
9.18 商汤科技笔试 1. 第一题:走迷宫 门 ABCDE 锁abcde 墙X .路// AC: 60%import java.util.*;public class Main1 { public static void dfs(char map[][], int i, int j) { if(i < 0 || i >= map.length || j < 0 || j >= map[0].length || map[i][j] == 'X' || map[i]
9.17 京东笔试 1. 第一题:正则表达式题目:代码:import java.util.*;public class Main1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); s = s.trim(); if(s == "") { S
LeeCode中如何定义常见的数据结构? 1. 单链表:// Definition for singly-linked list.public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}2. 二叉树结点:// Definition for a binary tree node.public class TreeNode { int val; TreeNode left;
820. 单词的压缩编码 题目:820. 单词的压缩编码题解:1. 题解一:存储后缀2. 题解二:字典树解释一:解释二:代码:1. 代码一:存储后缀// 方法一: 存储后缀public static int minimumLengthEncoding(String[] words) { Set<String> set = new HashSet<>(Arrays.asList(words)); for(String word: words)
最长公共子串 题目:[编程题]最长公共子串题解:对比:1143. 最长公共子序列借助一下《图解算法》中的例子。假设对于两个字符串 fish 和 hish,我们可以绘制一个这样的表格,来求解它们最长的公共子串,即:注意,最长公共子串的最终答案并不一定在最后一个格子里,所以我们还需要一个变量 max 来记录最大值。注意:如果我们还需要知道具体的最长公共子串是什么,那么就需要再添加一个变量,记录最大值出现的位置,然后往前取最长公共子串的长度即可。代码:public class 最长公共子串 {
1143. 最长公共子序列 题目:1143. 最长公共子序列题解:动态规划代码:动态规划public class code1143 { public static int longestCommonSubsequence(String text1, String text2) { int n1 = text1.length(); int n2 = text2.length(); // dp[i][j] 表示 S1 的前 i 个字符与 S2 的前 j 个字符最长公共子
41. 缺失的第一个正数 题目:41. 缺失的第一个正数题解:1. 解释一:2. 解释二:3. 解释三:4. 解释四:代码:public class code41 { // tips: 正整数从1开始,初步换序后,a[0]应为1,a[1]应为2 public static int firstMissingPositive(int[] nums) { int n = nums.length; // 换序的过程即将数换到正确位置的过程,最多换n个,故
1371. 每个元音包含偶数次的最长子字符串 题目:1371. 每个元音包含偶数次的最长子字符串题解:代码:import java.util.Arrays;public class code1371 { public static int findTheLongestSubstring(String s) { int n = s.length(); // 1左移5次 相当于2^5,从00000-11111种状态,代表5个元音字母的个数是否为偶数,0代表偶数,1代表奇数 int
680. 验证回文字符串 Ⅱ 题目:680. 验证回文字符串 Ⅱ题解:代码:public class code680 {// 思路: 判断是否是回文串,只要存在一个不相同,即不为回文串;// 删除一个字符串的方法:① 删除左边的 ②删除右边的// 删除之后只需要判断没判断过的部分,不需要重新开始了喔!! public static boolean validPalindrome(String s) { // 不用判断边界 int
125. 验证回文串 题目:125. 验证回文串题解:1. 题解一:正则表达式我们还可以使用正则匹配,把特殊字符过滤掉,只留下字母和数字,然后转化为小写,再反转,最后在判断是否相等。当然这种写法只是提供了一种思路,面试中如果写出这种肯定还会让你再写一种的,因为它没有完全考察出对这题的解题思路。2. 题解二:双指针中的左右指针最简单的就是使用双指针,一个指向前,一个指向后,遇到空格以及特殊字符要跳过,然后判断。代码:1. 代码一:正则表达式// 方法1: 正则表达式public static boole
132. 分割回文串 II 题目:132. 分割回文串 II题解:代码:public class code132 { public static int minCut(String s) { int len = s.length(); if(len < 2) { return 0; } // dp[i]:表示前缀子串 s[0:i] 分割成若干个回文子串所需要最小分割次数。 int d
131. 分割回文串 题目:131. 分割回文串题解:经典回溯写法代码:经典回溯写法1. 写法1:import java.util.*;public class code131 { public List<List<String>> res = new ArrayList<>(); public String s; public List<List<String>> partition(String s) {
9.13 美团笔试 第五题:import java.util.*;public class Main5 { public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()) { int n = in.nextInt(); int[][] data = new int[n][3];
8.27 京东笔试 1. 第一题:// 参考:// https://www.nowcoder.com/discuss/491030// https://www.nowcoder.com/discuss/490892// https://blog.csdn.net/zyx_ly/article/details/106766702//// 题目:2,3,5组成的所有数的第n个数//// 思路:问题转换成十进制n转换成3进制数,用三进制的0,1,2对应题目的2,3,5.// 由于n的计数不是从0开始而是从1开始,
9.4 哔哩哔哩笔试 1. 第一题:public class Main1 { public static int GetMaxConsecutiveOnes(int[] arr, int k) { int left = 0; int right = 0; int max = 0; int zero = 0; while(right != arr.length) { if(arr[right++] =
9.8 小米笔试 1. 第一题:// 第一题:判断密码是否符合要求:// 给一系列密码:每个密码用空格分隔//(1)同时具有大写、小写、符号、数字输出0;//(2)长度不在8-120之间,输出1;//(3)类型不符合输出2;import java.util.*;public class Main1 {// // 方法1://// public static final String REG_NUMBER = ".*\\d+.*";//// public static final
字符串碎片 题目:字符串碎片题解:所有块的总长度就是字符串的长度,数一下有多少块就行了。代码:import java.util.*;public class 字符串碎片 { public static void GetFragment (String str) { char c = str.charAt(0); int n = 1; // 统计不同的碎片的数量 for(int i = 1; i <
1004. 最大连续1的个数 III 题目:1004. 最大连续1的个数 III题解:滑动窗口代码:滑动窗口public class code1004 { // 利用滑动窗口来解决,即利用 left,right 来记录窗口的大小 // 利用窗口内的 zero 来记录0的数量 public static int longestOnes(int[] A, int K) { int left = 0; // 滑动窗口区间左端点 int right = 0; // 滑动窗口区间右端点
9.6 腾讯后台开发笔试 1. 第一题:思路:有序的,直接遍历比较就可以了import java.util.*;// ACpublic class Main1 { public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public static ListNode cre
剑指 Offer 20. 表示数值的字符串 题目:剑指 Offer 20. 表示数值的字符串题解:// '.' 出现正确情况:只出现一次,且必须出现在 e / E 的前面//// 'e / E' 出现正确情况:只出现一次,且 e / E 出现前,前面必须有数字//// '+ / -' 出现正确情况:只能出现在开头(0位置)或者e / E的后面第一个位置(紧接 e / E 的后面)代码:import java.util.*;// '.' 出现正确情况:只出现一次,且必须出现在 e / E 的前面//
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++) {
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++) {
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++) {
617. 合并二叉树 题目:617. 合并二叉树题解:1. 题解一:递归法2. 题解二:迭代法代码:1. 代码一:递归法import java.util.*;public class code617 { // 解法1: 递归法 /** * 思想:将一棵树t2,合并到另一棵树t1 * 递归公式:合并当前节点 + 合并左子树 + 合并右子树 * 终止条件:t1或t1的节点为空 * */ public static TreeNod
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
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++) {
538. 把二叉搜索树转换为累加树 题目:538. 把二叉搜索树转换为累加树题解:1. 题解一:递归法2. 题解二:迭代法代码:1. 代码一:递归法public class code538 { // 方法1: 递归法 public int sum = 0; public TreeNode convertBST(TreeNode root) { if(root == null) { return null; }
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
461. 汉明距离 题目:461. 汉明距离题解:然后紧接着是:面试题15. 二进制中1的个数代码:public class code461 {// // 方法一: 内置位计数功能// public static int hammingDistance(int x, int y) {// return Integer.bitCount(x ^ y);// }// // 方法二: 使用toBinaryString函数// public static in
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 的数据修改为负
438. 找到字符串中所有字母异位词 题目:438. 找到字符串中所有字母异位词题解:滑动窗口参考:3. 无重复字符的最长子串滑动窗口,具体思路见代码。代码:滑动窗口import java.util.*;public class code438 { public static List<Integer> findAnagrams(String s, String p) { // 用于返回字母异位词的起始索引 List<Integer> res = new
437. 路径总和 III 题目:437. 路径总和 III题解:1. 题解一:双重递归2. 题解二:前缀和核心代码:// 当前路径上的和currSum += node.val;// currSum-target相当于找路径的起点,起点的sum+target=currSum,当前点到起点的距离就是targetres += prefixSumCount.getOrDefault(currSum - target, 0);// 更新路径上当前节点前缀和的个数prefixSumCount.put(currS
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
399. 除法求值 题目:399. 除法求值题解:并查集代码:并查集import java.util.*;public class code399 { /** * key : 当前节点 value : 其父节点 */ private Map<String, String> parents = new HashMap<>(); /** * key : 当前节点 value : 父节点/当前节点 */
394. 字符串解码 题目:394. 字符串解码题解:1. 如果遇到 ']',就一直在栈中找到 '[',将之间的字符连接起来,然后将 '['前面的数字作为出现次数,并将之前的 string 连接起来,再次压栈;2. 如果遇到数字、字母、'['就直接压栈;3. 最后将栈里的字符串弹出,并连接起来就ok了;代码:import java.util.*;public class code394 { // 1. 如果遇到 ']',就一直在栈中找到 '[',将之间的字符连接起来,然后将 '['前面的数字作为出
Spring入门第一讲——Spring框架的快速入门 Spring的概述什么是Spring?我们可以从度娘上看到这样有关Spring的介绍:说得更加详细一点,Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其...
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) { // 使
338. 比特位计数 题目:338. 比特位计数题解:解释一:解释二:解释三:解释四:1. 题解一:动态规划 + 最低有效位2. 题解二:动态规划 + 最后设置位代码:1. 代码一:动态规划 + 最低有效位import java.util.*;public class code338 { // 方法1: 动态规划 + 最低有效位 public static int[] countBits(int num) { int res[] = new int
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 { //
213. 打家劫舍 II 题目:213. 打家劫舍 II题解:198. 打家劫舍代码:public class code213 { public static int rob(int[] nums) { int len = nums.length; if(len == 0) { return 0; } if(len == 1) { return nums[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]: 手上持有股票的最大收益
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]]; // 第一步找到相遇点
283. 移动零 题目:283. 移动零题解:1. 题解一:两次遍历解题思路:遍历数组,不为0的元素移到数组前方,用index下标记录。遍历结束,对index值后的元素统一设为02. 题解二:一次遍历解题思路:直接在遍历的时候,进行元素覆盖即可,并把原来的值设为0代码:1. 代码一:两次遍历public class code283 { // 方法1:两次遍历 public static void moveZeroes(int[] nums) { int inde
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
238. 除自身以外数组的乘积 题目:238. 除自身以外数组的乘积剑指 Offer 66. 构建乘积数组题解:剑指 Offer 66. 构建乘积数组代码:public class code238 { // // 方法1:左右数组 // public static int[] productExceptSelf(int[] nums) { // if(nums == null || nums.length == 0) // { // return
234. 回文链表 题目:234. 回文链表题解:1. 题解一:快指针走到末尾,慢指针刚好到中间,其中慢指针将前半部分反转,然后比较反转后的前半部分与原来的后半部分是否相同。2. 题解二:其一,find mid node 使用快慢指针找到链表中点。 其二,reverse 逆序后半部分。 其三,check 从头、中点,开始比较是否相同。偶数节点情况:奇数节点情况:代码:1. 代码一:public class code234 { public static boolean isPali
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; }
VSCode编写Java程序的最新问题 1. VSCode showing “Java 11 or more recent is required to run. Please download and install a recent JDK”参考:1. VSCode showing “Java 11 or more recent is required to run. Please download and install a recent JDK”2. JDK Requirements3. Mac下查看已安装的jdk版本及其安装目录
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. 代码二:使用最小堆(
208. 实现 Trie (前缀树) 题目:208. 实现 Trie (前缀树)题解:1. 定义类 TrieNodeclass TrieNode{ private boolean isEnd; //该结点是否是一个串的结束 TrieNode next[]; //字母映射表 next public TrieNode() { isEnd = false; next = new TrieNode[26]; }}2. 插入
207. 课程表 题目:207. 课程表题解:广度优先搜索无向图及其邻接表:有向图及其邻接表:1. 解释一:2. 解释二:代码:广度优先搜索import java.util.*;public class code207 { // 边缘列表 prerequisites 【后置结点,前置结点】 public static boolean canFinish(int numCourses, int[][] prerequisites) { int i
idea生成类注释和方法注释的正确方法 目录目录生成类注释生成类注解模板生成方法注释生成方法注解模板 最近从eclipse转idea了,第一步当然是配置快捷键,模板等。但是!发生了一件贼蛋疼的事情,竟然一直找不到正确添加方法注释的方法! 最后自己摸索到了,在此详细记录,供大家参考。测试版本为idea for mac,可能快捷键不同,但是设置等肯定是相同的1生成类注释打开PreferencesEdit...
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
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;
148. 排序链表 题目:148. 排序链表题解:代码:public class code148 { // 自顶向下 public static ListNode sortList(ListNode head) { // 1、递归结束条件 // 当链表为空或者链表只剩下一个结点时,直接返回 head if(head == null || head.next == null) { return head;