自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode1765. 地图中的最高点(多源bfs)

文章目录1.2.题解1.题目连接2.题解首先是想用dfs写,对每个点进行dfs取四周最小的点的值再加1就是此点的高度,但是这样做不出来。用多源bfs写,以每个水域为原点进行bfs,下一层的高度一定比当前层高。 public int[][] highestPeak(int[][] g) { int m = g.length, n = g[0].length; int[][] ans = new int[m][n]; Deque<int[

2022-01-29 10:53:13 627

原创 java对象内存分配

分配原则一般来讲,new一个对象后,内存一般分配在堆空间中,但也有一些例外。有些对象会分配在栈上或者TLAB中。如果可以在栈上分配,就直接在栈上分配,不行就会进行TLAB分配,再不行就判断是否是大对象,大对象直接进入老年代,再不行就分配到eden区,eden若是空间不够,就会进行一次MinorGC。大对象顾名思义就是很大的对象,需要大量的连续内存空间,jvm会让这种对象直接进入老年代,减少eden和两个survivor区发生大量的内存复制,提高效率。栈上分配大家都知道,在jvm中堆是线程共享的,.

2022-01-27 23:18:24 2199

转载 LeetCode 300.最长递增子序列(LIS问题)

文章目录问题:[LeetCode 300.最长递增子序列](https://leetcode-cn.com/problems/longest-increasing-subsequence/)1.序列DP2.用二分查找和tail数组优化问题:LeetCode 300.最长递增子序列1.序列DP状态定义:dp[i]dp[i] 的值代表 nums 以 nums[i]nums[i] 结尾的最长子序列长度。转移方程: 设 j∈[0,i)j∈[0,i),考虑每轮计算新 dp[i]dp[i] 时,遍历 [0,

2022-01-14 18:55:42 148

原创 算法题自定义比较或排序的总结

文章目录一、二维数组i[n][2]按x降序y升序对数组排序一、二维数组i[n][2]按x降序y升序对数组排序 Arrays.sort(people, new Comparator<int[]>() { public int compare(int[] person1, int[] person2) { if (person1[0] != person2[0]) { return p

2022-01-03 21:46:46 505

转载 股票问题系列通解(转载翻译)

股票问题系列通解(转载翻译)

2022-01-01 20:37:23 66

转载 二分查找汇总(转载,加了些许注释)

文章目录1.基本二分查找2.基于基本二分查找的变形1.基本二分查找 //1.1二分查找原始版--查找某个数的下标(任意一个) //在有序数组中查找某个数,找到返回数的下标,存在多个返回任意一个即可,没有返回-1。 //所有程序采用左右均为闭区间,即函数中n为最后一个元素下标,而不是元素个数。典型代码如下: public int binarySearch(int[] a, int n, int key){ //n + 1 个数 int low

2021-12-01 20:16:19 81

转载 LeetCode 1734. 解码异或后的排列 位运算/medium

文章目录1.Description2.Example3.Solution1.1.Description给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] = perm[i] XOR perm[i + 1] 。比方说,如果 perm = [1,3,2] ,那么 encoded = [2,1] 。给你 encoded 数组,请你返回原始数组 perm 。题目保证答案存在且唯一。

2021-05-12 09:48:20 106

转载 LeetCode 402. 移掉K位数字 单调栈/medium

文章目录1.Description2.Example3.Solution1.直接写2.使用单调栈1.Description给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。2.Example示例 1 :输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :

2021-05-09 17:14:20 97

转载 LeetCode 1011. 在 D 天内送达包裹的能力 二分查找/medium

文章目录1.Description2.Example3.Solution1.Description传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。2.Example输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最

2021-05-06 21:05:13 68

原创 LeetCode 938. 二叉搜索树的范围和 easy/树,dfs

文章目录1.Description2.Example3.Solution1.我的一般思路2.不设置全局变量并且考虑到题目是二叉搜索树3.不使用递归,使用迭代/bfs1.Description给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。2.Example输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:323.Solution1.我的一般思路直接进行dfs,通过一个全局变量

2021-04-27 21:09:17 81

原创 LeetCode 368. 最大整除子集 动态规划/medium

文章目录1.Description2.Example3.Solution1.Description给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。2.Example示例 1:输入:nums = [1,2,3

2021-04-23 20:59:10 96

原创 LeetCode 220. 存在重复元素 III 有序集合,桶排序思想/medium

文章目录1.Description2.Example3.Solution1.滑动窗口+有序集合2.桶排序思想1.Description给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。2.Example示例 1:输入:nums = [1,2,3,1], k = 3, t =

2021-04-21 15:29:02 140

原创 LeetCode 91. 解码方法 动态规划/medium

文章目录1.Description2.Example3.Solution1.Description一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,

2021-04-21 15:08:24 178

原创 LeetCode 213. 打家劫舍 II 动态规划/Medium

文章目录1.Description2.Example3.Solution1.Description你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。2.Example示例 1:输入:nums = [2

2021-04-15 11:40:27 232

原创 Java 二叉树的创建和遍历

题目描述给出一个n个节点的二叉树,请求出二叉树的前序遍历,中序遍历和后序遍历。输入第一位一个整数n(0<n<=26),表示二叉树有n个节点,以下n行,每行第一个为一个大写字母表示节点,后面为两整数,第一个表示左儿子序号,第二个表示右儿子序号,如果该序号为0表示没有输出共三行,第一行为二叉树的前序遍历,第二行为中序遍历,第三行为后序遍历样例输入7F 2 3C 4 5E 0 6A 0 0D 7 0G 0 0B 0 0样例输出FCADBEGACBDFEGABDCG

2021-04-14 17:07:53 268

原创 LeetCode 783. 二叉搜索树节点最小距离 树/easy

文章目录1.Description2.Example3.Solution1.Description给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。2.Example输入:root = [4,2,6,1,3]输出:13.Solution使用中序遍历,计算当前节点和前一个节点的差值。class Solution { int pre; int ans; public int minDiffInBST(TreeNode root

2021-04-14 16:54:02 75

原创 LeetCode 81. 搜索旋转排序数组 II 二分/medium

文章目录1.Description2.Example3.Solution1.如果数组中数字不重复的话2.如果数组中数字重复的话1.Description已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从

2021-04-08 23:23:07 76

转载 Java 数学组合 动态规划

文章目录1.Description2.Example3.Solution1.Description给定N 个正整数A1 ,A2 ,…,An ,从中选出若干个数,使它们的和为M ,编程计算选择方案数;2.Example输入第一行是两个数字,表示N 和M 。第二行是N 个数。 1<=N <=100,1<=M <=10000,1<=Ai <=1000输出就一个数字,表示和为M 的组合的个数,答案要对2^64取模。 样例输入4 41 1 2 2

2021-04-07 12:57:48 249

原创 数据结构:并查集 某市计划建设一个通信系统 Java实现 图/并查

文章目录1.Description2.Example3.Solution1.Description某市计划建设一个通信系统。按照规划,这个系统包含若干端点,这些端点由通信线缆链接。消息可以在任何一个端点产生,并且只能通过线缆传送。每个端点接收消息后会将消息传送到与其相连的端点,除了那个消息发送过来的端点。如果某个端点是产生消息的端点,那么消息将被传送到与其相连的每一个端点。为了提高传送效率和节约资源,要求当消息在某个端点生成后,其余各个端点均能接收到消息,并且每个端点均不会重复收到消息。现给你通信

2021-04-04 16:44:13 177

原创 LeetCode 781. 森林中的兔子 哈希表/数学问题 medium

文章目录1.Description2.Example3.Solution1.我的题解2.官方1.Description森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。2.Example示例:输入: answers = [1, 1, 2]输出: 5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。

2021-04-04 15:48:03 102

转载 LeetCode 1143. 最长公共子序列 动态规划/medium

文章目录1.Description2.Example3.Solution1.状态定义2.状态转移方程3.状态的初始化4. 遍历方向与范围5.最终返回结果1.Description给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “

2021-04-03 22:30:52 145

原创 LeetCode 面试题 17.21. 直方图的水量 双指针,单调栈/hard

文章目录1.Description2.Example3.Solution1.双指针2.单调栈1.Description给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。2.Example上面是由数组 [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]输出: 63.Solu

2021-04-03 13:48:34 156

原创 快速幂/矩阵快速幂实现斐波那契数列 Java

参考:斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?快速幂1.快速幂快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。int Qpow( int a,int n){ int ans = 1; while(n){ if(n&1) ans*=a ; a *= a ; n>>= 1; } return ans;}2.矩阵快速幂实

2021-04-02 23:50:26 787

原创 LeetCode 90. 子集 II 回溯/medium

文章目录1.Description2.Example3.Solution1.Description给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。2.Example输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]3.Solution使用回溯算法,注意递归时要判断下要添加的元素跟前边的一个元素是否相同,相同的话就跳过,应

2021-04-01 21:13:19 72

原创 LeetCode 240. 搜索二维矩阵 II medium

文章目录1.Description2.Example3.Solution1.2.递归1.Description编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。2.Example输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target =

2021-03-30 16:11:34 81

原创 LeetCode 74. 搜索二维矩阵 二分/medium

文章目录1.Description2.Example3.Solution1.找到target所在列,在遍历该列2.两次二分查找3.一次二分查找1.Description编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。2.Example输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true

2021-03-30 15:36:07 117

原创 LeetCode 190. 颠倒二进制位 位运算/easy

文章目录1.Description2.Example3.Solution1.逐位颠倒2.分治1.Description颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整

2021-03-30 14:58:52 140

原创 数据结构:树

文章目录1.二叉树1.二叉树中序(根)遍历1.递归2.迭代3.Morris 遍历算法1.二叉树1.二叉树中序(根)遍历1.递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val =

2021-03-28 21:43:08 72

原创 LeetCode 456. 132模式 单调栈/medium

文章目录1.Description2.Example3.Solution1.Description给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。2.Example输入:nums = [3,

2021-03-24 15:37:24 85

原创 Prime Palindromes 回文质数 Java

判断回文数可以参考LeetCode 9,注意跳过所有偶数情况,可以节省时间。LeetCode 9.判断回文数public class Solution { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int a = sc.nextInt();

2021-03-23 21:37:40 60

原创 LeetCode 341.扁平化嵌套列表迭代器 dfs,栈/ Medium

文章目录1.Description2.Example3.Solution1.在调用构造函数时就将重叠列表平铺开来2.构造时不展开,在调用hasnext方法时直接输出重叠列表中的数1.Description给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。2.Example输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直

2021-03-23 19:40:56 79

原创 Java跳石头游戏 二分算法

文章目录1.Description2.Example3.Solution1.Description每逢过年,奶牛们玩跳石头游戏.这个游戏在一条笔直的河上进行.河上两个石头被作为起点和终点,它们之间的距离为L(1 ≤L <10’)、还有N(O<N<50000)个石头放置在这两个石头之间,每个石头距离起点都有一个独一无二的整数距离D;(0<D;<L).游戏进行的时候,奶牛们从起点开始,依次跳到每一个相邻的石头上,最终到达终点.约翰对自己的奶牛很有信心.他每年都到场观看这奶牛

2021-03-22 17:19:14 351

原创 LeetCode 191. Number of 1 Bits(位1的个数) 位运算/easy

文章目录1.Description2.Example3.Solution1.按位右移2.位运算优化1.Description编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来

2021-03-22 16:18:40 76

原创 一些二进制位操作

“>>” : 右移操作:注意:Java中的“>>”是算数右移:舍弃最低位,高位用符号位填补;“>>>”是逻辑右移:舍弃最低位,高位用 0 填补。整数集合set位运算整数集合做标志时,比如回溯时的visited标志数组vstd 访问 i :vstd | (1 << i)vstd 离开 i :vstd & ~(1 << i)vstd 不包含 i : not vstd & (1 << i)并集 :A |

2021-03-22 16:06:17 96

原创 A-B 数对 hashmap

文章目录1.Description2.Example3.Solution1.Description给出一串数以及一个数字 C,要求计算出所有 A−B=C的数对的个数,其中 A,B 为给定的一串数中的数字(两个数对只要对应的下标不完全相同,即为两个不同的数对)。2.Example输入输入共两行。第一行两个整数 N(1<=N<=200,000),C 。第二行 N个整数,作为要求处理的那串数。保证所有输入数据都在 32位带符号整数范围内(注意可能存在负数)。输出一行,表示

2021-03-21 23:40:50 67

原创 LeetCode 73. Set Matrix Zeroes(矩阵置零) 数组/medium

文章目录1.Description2.Example3.Solution1.使用标记数组2.使用两个标记变量1.Description给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗?2.Example输入:matri

2021-03-21 19:21:38 132

原创 zzuoj 校园活动 枚举 java

文章目录1.Description2.Example3.Solution1.Description给出一个长为 n ,由数字组成的字符串,问将这个字符串分为连续的一些组,使得每个组内的数字之和相等,最多可以分为多少组。2.Example输入在第一行中给出字符串的长度 n,在第二行中给出一个长为 n ,由数字组成的字符串 s 。(1 <= n <= 10^6)输出最多可以分的组数。样例输入531113样例输出33.Solutionpublic class

2021-03-20 22:54:42 68

原创 LeetCode 115. Distinct Subsequences(反转链表 II)

文章目录1.Description2.Example3.Solution1.Description给你单链表的头节点 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。2.Example输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]输入:head = [5], left = 1, right = 1输

2021-03-18 21:38:45 70

原创 115. Distinct Subsequences(不同的子序列) 动态规划/hard

文章目录1.Description2.Example3.Solution1.Description给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。2.Example输入:s = "rabbbit", t = "rabbit"输出:3解释

2021-03-17 20:51:03 121

原创 59. Spiral Matrix II(螺旋矩阵2) 数组/medium

文章目录1.Description2.Example3.Solution1.Description给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。2.Example输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]3.Solution一圈一圈地分别遍历矩阵的上、右、下、左四个边。设定一个seed值,毎向前移动一格就自增1.class Solution { public i

2021-03-16 19:24:18 48

空空如也

空空如也

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

TA关注的人

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