LeeCode代码
Lazy mode
简单性和模块化是软件工程的基石;分布式和容错性是互联网的生命。
当你还不能写出自己满意的程序时,你就不要去睡觉。
展开
-
10. 正则表达式匹配(动态规划)
package com.mt.wsq.lc.dp;/** * 10. 正则表达式匹配 * * @author wangshiqiang03 * @date 2021/8/13 * * https://leetcode-cn.com/problems/regular-expression-matching/ */public class IsMatch { /** * 整体思想:化整为零,采用逐个位置进行匹配 * 定义状态:那些是变化的值,这道题很明显就是s和p原创 2021-08-13 22:47:27 · 350 阅读 · 0 评论 -
最长回文子串(矩阵型动态规划)
package com.heu.wsq.leetcode.a1star;/** * 最长回文子串 * @author wsq * @date 2021/5/27 * 给你一个字符串 s,找到 s 中最长的回文子串。 * * 示例 1: * 输入:s = "babad" * 输出:"bab" * 解释:"aba" 同样是符合题意的答案。 * * 示例 2: * 输入:s = "cbbd" * 输出:"bb" * * 链接:https://leetcode-cn.com/lee原创 2021-05-27 11:02:06 · 177 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
package com.heu.wsq.leetcode.inoffer;/** * 剑指 Offer 04. 二维数组中的查找 * @author wsq * @date 2021/5/27 * 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序, * 每一列都按照从上到下递增的顺序排序。请完成一个高效的函数, * 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 * * 示例: * 现有矩阵 matrix 如下: * [ * [1, 4,原创 2021-05-27 10:02:33 · 101 阅读 · 0 评论 -
面试题 05.01. 插入(位运算)
package com.heu.wsq.leetcode.interview_book;/** * 面试题 05.01. 插入 * @author wsq * @date 2021/5/13 * 给定两个整型数字 N 与 M,以及表示比特位置的 i 与 j(i <= j,且从 0 位开始计算)。 * 编写一种方法,使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域,不足之处用 0 补齐。 * 具体插入过程如图所示。 * 题目保证从 i 位到 j 位足以容纳 M原创 2021-05-13 09:29:36 · 135 阅读 · 0 评论 -
1310. 子数组异或查询(前缀和思想)
package com.heu.wsq.leetcode.prefix_sum;/** * 1310. 子数组异或查询 * @author wsq * @date 2021/5/12 * 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 * 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor ... xor arr[Ri])作为本次查询的结果。 * 并返回一原创 2021-05-12 19:02:50 · 135 阅读 · 0 评论 -
面试题 08.06. 汉诺塔问题
package com.heu.wsq.leetcode.interview_book;import java.util.List;/** * 面试题 08.06. 汉诺塔问题 * @author wsq * @date 2021/5/6 * 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: * (1) 每次只能移动一个盘子; * (原创 2021-05-06 23:04:57 · 142 阅读 · 0 评论 -
面试题 16.07. 最大数值(位运算)
package com.heu.wsq.leetcode.interview_book;/** * 面试题 16.07. 最大数值 * @author wsq * @date 2021/5/4 * 编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。 * * 示例: * 输入: a = 1, b = 2 * 输出: 2 */public class Maximum { public int maximum(int a, int b){原创 2021-05-04 17:19:52 · 122 阅读 · 0 评论 -
633. 平方数之和(双指针)
package com.heu.wsq.leetcode.double_point;/** * 633. 平方数之和 * @author wsq * @date 2021/4/28 * 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。 * * 示例 1: * 输入:c = 5 * 输出:true * 解释:1 * 1 + 2 * 2 = 5 * * 示例 2: * 输入:c = 3 * 输出:false * * 链接:https:原创 2021-04-28 21:27:36 · 124 阅读 · 0 评论 -
1011. 在 D 天内送达包裹的能力
package com.heu.wsq.leetcode.binarysearch;/** * 1011. 在 D 天内送达包裹的能力 * @author wsq * @date 2021/4/26 * 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。 * 传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。 * 返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。 * *原创 2021-04-26 22:48:02 · 106 阅读 · 0 评论 -
875. 爱吃香蕉的珂珂(二分查找)
二分搜索只能用来查找元素吗?参考下面这篇文章:二分搜索只能查找元素么?当问题是在一个值有序的空间域中,获取一个满足条件的值,我们都可以考虑使用二分查找的方法,进行剪治去做,每次排除一半的搜索空间。package com.heu.wsq.leetcode.binarysearch;/** * 875. 爱吃香蕉的珂珂 * @author wsq * @date 2021/4/26 * 珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 .原创 2021-04-26 15:31:22 · 202 阅读 · 0 评论 -
397 · 最长上升连续子序列(动态规划)
package com.heu.wsq.leetcode.dp;/** * 397 · 最长上升连续子序列 * @author wsq * @date 2021/4/25 * 描述 * 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。) * * 样例 * * 样例 1: * 输入:[5, 4, 2, 1, 3] * 输出:4 * 解释:原创 2021-04-25 23:12:08 · 293 阅读 · 0 评论 -
460 · 在排序数组中找最接近的K个数(二分查找 + 线性扫描)
package com.heu.wsq.leetcode.binarysearch;/** * 460 · 在排序数组中找最接近的K个数 * @author wsq * @date 2021/4/24 * * 描述 * 给一个目标数 target, 一个非负整数 k, 一个按照升序排列的数组 A。 * 在A中找与target最接近的k个整数。返回这k个数并按照与target的接近程度从小到大排序,如果接近程度相当,那么小的数排在前面。 * * 1. k是一个非负整数,并且总是小于已排序原创 2021-04-24 16:24:23 · 374 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I(二分查找)
package com.heu.wsq.leetcode.inoffer;/** * 剑指 Offer 53 - I. 在排序数组中查找数字 I * @author wsq * @date 2021/4/24 * 统计一个数字在排序数组中出现的次数。 * * 示例 1: * 输入: nums = [5,7,7,8,8,10], target = 8 * 输出: 2 * * 示例 2: * 输入: nums = [5,7,7,8,8,10], target = 6 * 输出: 0原创 2021-04-24 15:43:31 · 113 阅读 · 0 评论 -
368. 最大整除子集(动态规划)
package com.heu.wsq.leetcode.dp;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 368. 最大整除子集 * @author wsq * @date 2021/4/23 * 给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:原创 2021-04-23 18:52:43 · 175 阅读 · 0 评论 -
363. 矩形区域不超过 K 的最大数值和(二维前缀和,区域面积)
package com.heu.wsq.leetcode.prefix_sum;/** * 363. 矩形区域不超过 K 的最大数值和 * @author wsq * @date 2021/4/22 * 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 * 题目数据保证总会存在一个数值和不超过 k 的矩形区域。 * * 示例 1: * 输入:matrix = [[1,0,1],[0,-2,3]], k = 2 * 输出原创 2021-04-22 20:44:02 · 157 阅读 · 0 评论 -
1897 · 会议室 3(区间判重和最大重叠区间问题)
package com.heu.wsq.leetcode.interval;import java.util.*;/** * 1897 · 会议室 3 * @author wsq * @date 2021/4/20 * 描述 * 你有一个当前会议列表intervals,里面表明了每个会议的开始和结束时间,以及一些会议室rooms。现在有一系列会议ask需要加入,逐个判断他们能否被安排进当前的会议列表中而不产生冲突。一个会议室在同一时间只能进行一场会议。每个询问都相互独立。 * Ensur原创 2021-04-20 21:22:25 · 450 阅读 · 0 评论 -
1353. 最多可以参加的会议数目(贪心算法)
package com.heu.wsq.leetcode.interval;import java.util.Arrays;import java.util.Comparator;import java.util.PriorityQueue;/** * 1353. 最多可以参加的会议数目 * @author wsq * @date 2021/4/20 * 给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 start原创 2021-04-20 21:10:37 · 512 阅读 · 0 评论 -
28. 实现 strStr(KMP算法,公共子串的位置)
package com.heu.wsq.leetcode.kmp;/** * 28. 实现 strStr() * @author wsq * @date 2021/4/20 * 实现 strStr() 函数。 * 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。 * 说明: * 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题原创 2021-04-20 13:45:31 · 140 阅读 · 0 评论 -
87. 扰乱字符串(动态规划)
package com.heu.wsq.leetcode.dp;import java.util.HashMap;import java.util.Map;/** * 87. 扰乱字符串 * @author wsq * @date 2021/4/16 * 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : * 如果字符串的长度为 1 ,算法停止 * 如果字符串的长度 > 1 ,执行下述步骤: * 在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,原创 2021-04-16 19:50:04 · 147 阅读 · 0 评论 -
213. 打家劫舍 II(动态规划)
package com.heu.wsq.leetcode.dp;/** * 213. 打家劫舍 II * @author wsq * @date 2021/4/15 * 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 * 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,原创 2021-04-15 22:24:55 · 125 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数(大数情况,数字类型表示不下时)
package com.heu.wsq.leetcode.inoffer;import java.util.ArrayList;import java.util.List;/** * 剑指 Offer 17. 打印从1到最大的n位数 * @author wsq * @date 2020/12/7 * 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 * * 示例 1: * * 输入: n = 1 *原创 2021-04-14 22:59:58 · 95 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
package com.heu.wsq.leetcode.ashe_ji_ti;/** * 208. 实现 Trie (前缀树) * @author wsq * @date 2021/4/14 * Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 * 请你实现 Trie 类: * Trie() 初始化前缀树对象。 * void insert(String word) 向前缀树原创 2021-04-14 21:26:18 · 106 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
package com.heu.wsq.leetcode.inoffer;/** * 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 * @author wsq * @date 2021/04/13 * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 * * 示例: * 输入:nums = [1,2,3,4] * 输出:[1,3,2,4] * 注:[3,1,2,4] 也是正确的答案之一。 * * 链接:原创 2021-04-13 23:09:11 · 100 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围(回溯算法)
package com.heu.wsq.leetcode.inoffer;/** * 剑指 Offer 13. 机器人的运动范围 * @author wsq * @date 2021/4/13 * 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3原创 2021-04-13 21:49:44 · 156 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径(回溯算法)
package com.heu.wsq.leetcode.inoffer;/** * 剑指 Offer 12. 矩阵中的路径 * @author wsq * @date 2021/4/13 * 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 * 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。原创 2021-04-13 21:25:37 · 133 阅读 · 0 评论 -
556. 下一个更大元素 III(挺重要的一个思想)
package com.heu.wsq.leetcode.arr;/** * 556. 下一个更大元素 III * @author wsq * @date 2021/4/9 * 给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。 * 注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。 * * 示例 1: * 输入:n = 1原创 2021-04-09 21:36:11 · 88 阅读 · 0 评论 -
460. LFU 缓存(双哈希)
package com.heu.wsq.leetcode.MemCache;import java.util.HashMap;import java.util.LinkedList;import java.util.Map;/** * 460. LFU 缓存 * @author wsq * @date 2021/4/9 * 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。 * 实现 LFUCache 类: * LFUCache(int capacity) - 用数据结构的容原创 2021-04-09 20:10:15 · 116 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值(二分查找)
package com.heu.wsq.leetcode.binarysearch;/** * 153. 寻找旋转排序数组中的最小值 * @author wsq * @date 2021/4/9 * 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到: * 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2] * 若旋转 7 次,则可以得到 [0,1,2,4,5,6,7原创 2021-04-09 14:18:36 · 175 阅读 · 0 评论 -
1314. 矩阵区域和(二维前缀和)
package com.heu.wsq.leetcode.arr;/** * 1314. 矩阵区域和 * @author wsq * @date 2021/4/6 * 给你一个 m * n 的矩阵 mat 和一个整数 K ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: * i - K <= r <= i + K, j - K <= c <= j + K * (r, c) 在矩阵内。 *原创 2021-04-06 21:42:05 · 231 阅读 · 0 评论 -
1292. 元素和小于等于阈值的正方形的最大边长(二维前缀和)
package com.heu.wsq.leetcode.arr;/** * 1292. 元素和小于等于阈值的正方形的最大边长 * @author wsq * @date 2021/4/6 * 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold。 * 请你返回元素总和小于或等于阈值的正方形区域的最大边长;如果没有这样的正方形区域,则返回 0 。 * * 示例 1: * * 输入:mat = [[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[原创 2021-04-06 21:06:06 · 170 阅读 · 0 评论 -
剑指 Offer 14- II. 剪绳子 II(贪心算法)
package com.heu.wsq.leetcode.tanxin;/** * 剑指 Offer 14- II. 剪绳子 II * @author wsq * @date 2021/4/6 * 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m - 1] 。请问 k[0]*k[1]*...*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、原创 2021-04-06 19:22:47 · 126 阅读 · 0 评论 -
146. LRU 缓存机制(双向链表)
package com.heu.wsq.leetcode.mylinkedlist;import java.util.HashMap;import java.util.Map;/** * 146. LRU 缓存机制 * @author wsq * @date 2021/4/5 * * 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 * 实现 LRUCache 类: * * LRUCache(int capacity) 以正整数作为容量 capaci原创 2021-04-05 10:28:35 · 211 阅读 · 0 评论 -
72. 编辑距离(动态规划)
package com.heu.wsq.leetcode.dp;/** * 72. 编辑距离 * @author wsq * @date 2021/4/4 * 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 * 你可以对一个单词进行如下三种操作: * 插入一个字符 * 删除一个字符 * 替换一个字符 * * 示例 1: * 输入:word1 = "horse", word2 = "ros" * 输出:3 * 解释:原创 2021-04-04 10:41:48 · 99 阅读 · 0 评论 -
115. 不同的子序列(动态规划)
package com.heu.wsq.leetcode.dp;/** * 115. 不同的子序列 * @author wsq * @date 2021/4/3 * 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 * 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是) * 题目数据保证答案符合 32 位带符号整数范围。 * *原创 2021-04-03 14:44:23 · 105 阅读 · 0 评论 -
1143. 最长公共子序列(序列型动态规划)
package com.heu.wsq.leetcode.dp;/** * 1143. 最长公共子序列 * @author wsq * @date 2021/4/3 * 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 * 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 * 例如,"ace" 是 "abcde" 的子序原创 2021-04-03 10:29:28 · 143 阅读 · 0 评论 -
15. 三数之和(双指针)
/*** 15. 三数之和* 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示例 2: 输入:nums = [] 输出:[] 链接:https://leetcode-cn.com/problems/3原创 2021-04-03 09:37:10 · 126 阅读 · 0 评论 -
0. Pow(x, n)(快速幂)
快速幂示例/*** 50. Pow(x, n)* 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。 示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x = 2.10000, n = 3 输出:9.26100 链接:https://leetcode-cn.com/problems/powx-n*/class Solution { public double myPow(double x原创 2021-04-02 16:48:06 · 125 阅读 · 0 评论 -
面试题 17.21. 直方图的水量(单调栈)
package com.heu.wsq.leetcode.dp;import java.util.Deque;import java.util.LinkedList;/** * 面试题 17.21. 直方图的水量 * @author wsq * @date 2021/4/2 * 给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。 * * 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可原创 2021-04-02 09:31:24 · 138 阅读 · 0 评论 -
1006. 笨阶乘(表达式求解问题)
package com.heu.wsq.leetcode.expressiontype;import java.util.Deque;import java.util.LinkedList;/** * 1006. 笨阶乘 * @author wsq * @date 2021/4/1 * 通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1。 * 相反,我们设计了一个原创 2021-04-01 09:34:32 · 208 阅读 · 1 评论 -
90. 子集 II(回溯,求有多少种组合的情况)
package com.heu.wsq.leetcode.huisu;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 90. 子集 II * @author wsq * @date 2021/3/31 * 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 * 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 *原创 2021-03-31 22:59:09 · 114 阅读 · 0 评论