![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
低调的骏马
为天地立心,为生民立命,为往圣继绝学,为万世开太平!
展开
-
931. 下降路径最小和(Java、动态规划、备忘录)
力扣931. 下降路径最小和(Java、动态规划、备忘录)原创 2022-07-02 13:42:56 · 176 阅读 · 0 评论 -
1905. 统计子岛屿(Java、DFS、岛屿问题)
力扣1905. 统计子岛屿(Java、DFS、岛屿问题)原创 2022-06-28 17:11:57 · 207 阅读 · 0 评论 -
695. 岛屿的最大面积(Java、DFS、岛屿问题)
力扣695. 岛屿的最大面积(Java、DFS、岛屿问题)原创 2022-06-28 16:48:11 · 175 阅读 · 0 评论 -
1020. 飞地的数量(Java、DFS、岛屿问题)
力扣1020. 飞地的数量(Java、DFS、岛屿问题)原创 2022-06-28 16:47:33 · 98 阅读 · 0 评论 -
1254. 统计封闭岛屿的数目(Java、DFS、岛屿问题)
力扣1254. 统计封闭岛屿的数目(Java、DFS、岛屿问题)原创 2022-06-28 16:11:13 · 193 阅读 · 0 评论 -
200. 岛屿数量(Java、DFS、岛屿题目)
力扣200. 岛屿数量(Java、DFS、岛屿题目)原创 2022-06-28 15:50:44 · 87 阅读 · 0 评论 -
990. 等式方程的可满足性(Java、Union-Find并查集)
力扣990. 等式方程的可满足性(Java、Union-Find并查集)原创 2022-06-24 20:22:58 · 115 阅读 · 0 评论 -
130. 被围绕的区域(Java、Union-Find)
力扣130. 被围绕的区域(Java、Union-Find)原创 2022-06-24 14:02:09 · 172 阅读 · 0 评论 -
207. 课程表(Java、DFS)
力扣210. 课程表 II(Java、DFS)原创 2022-06-23 17:47:59 · 166 阅读 · 0 评论 -
210. 课程表 II(Java、DFS)
力扣210. 课程表 II(Java、DFS)原创 2022-06-23 17:45:34 · 189 阅读 · 0 评论 -
天梯L1-015 跟奥巴马一起画方块 (15 分)(Java)
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式:输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。输出格式:输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。输入样例:10 a输原创 2022-04-13 21:52:58 · 351 阅读 · 0 评论 -
天梯赛L1-011 A-B (20 分)(Java)
L1-011 A-B (20 分)本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式:输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。输出格式:在一行中打印出A−B的结果字符串。输入样例:I love GPLT! It's a fun game!aeiou输出样例:I lv GPLT! It's原创 2022-04-13 21:21:43 · 593 阅读 · 1 评论 -
天梯L1-006 连续因子 (20 分)(Java)
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。输入格式:输入在一行中给出一个正整数 N(1<N<231)。输出格式:首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。输入样例:630输出样例:35*6*7原创 2022-04-12 21:52:31 · 129 阅读 · 0 评论 -
天梯L1-002 打印沙漏 (20 分)(Java)
分块输出校验即可主要关键是总数量 count += 2*(2*high-1);high++;每行数量 2*high-1;空格的输出是剩下占格的一半import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();原创 2022-04-12 21:43:47 · 662 阅读 · 0 评论 -
870. 优势洗牌(Java、田忌赛马)
详见注释另外:注意大顶堆小顶堆的用法!class Solution { public int[] advantageCount(int[] nums1, int[] nums2) { PriorityQueue<int[]> maxpq = new PriorityQueue<>( (int[] part1,int[] part2)->{ return part2[1]原创 2022-04-04 15:50:21 · 425 阅读 · 0 评论 -
1011. 在 D 天内送达包裹的能力(Java、二分搜索)
二分搜索题首先找到自变量x----船的运载能力然后是y-----------传运载完需要的天数便可以得到以下xy坐标图,xy之间的关系由f()方法表示左边left最低是每天运一件货物,所以取货物中最重的为左指针,day对应就是n件货物运n天右边right最多,一天全部运完,取货物重量总和,day对应则是1天本题要求返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。也就是去day天横线的最左边因此使用二分搜索框架中查找最左边的框架即可另外一个注意点是f()方法的编写差点原创 2022-04-04 11:19:26 · 706 阅读 · 0 评论 -
875. 爱吃香蕉的珂珂(Java、二分搜索)
这题是二分法的题首先找到自变量,也就是吃香蕉的速度K,作为x吃香蕉所花的时间H即为yK和H之间的具体运算关系则由f()函数来解释x,y的关系图如下所示所以要求最小速度也就是找到图中的K所在的最左边位置故使用二分搜索框架中查找最左边的框架即可class Solution { public int minEatingSpeed(int[] piles, int h) { int left = 1; int right = 1000000000+1;原创 2022-04-04 10:48:21 · 278 阅读 · 0 评论 -
3. 无重复字符的最长子串(Java、滑动窗口)
滑动窗口,还不需要need窗口注意每次循环中的while循环,就算没有执行while循环,也要记得下面的那一句max = Math.max(max,right-left);别忘记了执行了!!!class Solution { public int lengthOfLongestSubstring(String s) { Map<Character,Integer> window = new HashMap<>(); int left =原创 2022-04-04 10:26:59 · 857 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词(Java、滑动窗口)
标准滑动窗口框架把每次收缩的窗口长度符合的保存到集合中即可lass Solution { public List<Integer> findAnagrams(String s, String p) { Map<Character,Integer> need = new HashMap<>(); List<Integer> res = new ArrayList<>(); int right原创 2022-04-02 20:07:42 · 213 阅读 · 0 评论 -
567. 字符串的排列(Java、滑动窗口)
滑动窗口框架长度限制,符合长度情况优先返回true注意:valid应与need.size相符(元素种类数),而不能与s1.length()相等(目标字符串长度)ss Solution { public boolean checkInclusion(String s1, String s2) { Map<Character,Integer> need = new HashMap<>(); for(char c:s1.toCharArray(原创 2022-04-02 19:32:08 · 620 阅读 · 0 评论 -
76. 最小覆盖子串(Java、滑动窗口)
滑动窗口问题大体框架不变字符串有这个方法可以使用s.substring(start, start + minLen)class Solution { public String minWindow(String s, String t) { Map<Character,Integer> need = new HashMap<>(); for(char c : t.toCharArray()){ need.put(原创 2022-04-02 10:54:01 · 376 阅读 · 0 评论 -
1094. 拼车(Java、差分数组)
差分数组注意上下车时人数的变化再加一个结果res判断即可差分数组方式class Solution { public boolean carPooling(int[][] trips, int capacity) { int[] nums = new int[1001]; for(int[] rows:trips){ int val = rows[0]; int left = rows[1];原创 2022-03-31 22:53:04 · 327 阅读 · 0 评论 -
1109. 航班预订统计(Java、差分数组)
left和right都是从1开始计算的查分数组方式class Solution { public int[] corpFlightBookings(int[][] bookings, int n) { int[] nums = new int[n]; int[] res = new int[n]; for(int[] row:bookings){ int left = row[0];原创 2022-03-31 21:29:11 · 224 阅读 · 0 评论 -
560. 和为 K 的子数组(Java、前缀和)
使用HashMap来储存前缀和、该前缀和出现的次数如果一个前缀和数-k后仍是一个前缀和存在于hashmap中,那么久将对应的次数加到res中并且对当前的这个前缀和数对应的次数+1class Solution { public int subarraySum(int[] nums, int k) { int n = nums.length; int[] sum = new int[n+1]; HashMap<Integer,Integer&g原创 2022-03-31 21:07:35 · 202 阅读 · 0 评论 -
303. 区域和检索 - 数组不可变(Java前缀和)
nums从0开始sum从1开始left和right从0开始class NumArray { int[] sum; public NumArray(int[] nums) { sum = new int[nums.length+1]; for(int i = 1;i<=nums.length;i++){ sum[i] = nums[i-1]+sum[i-1]; } } public int su原创 2022-03-31 20:45:20 · 124 阅读 · 0 评论 -
174. 地下城游戏(Java、动态规划)
动态规划保证走到右下时血量至少为1个人觉得备忘录memo和dp数组本质上没什么区别存的是到当前格所需要的最少生命值,具体见注释class Solution { int[][] memo; public int calculateMinimumHP(int[][] dungeon) { int m = dungeon.length; int n = dungeon[0].length; memo = new int[m][n];原创 2022-03-31 10:16:59 · 3714 阅读 · 0 评论 -
72. 编辑距离(Java、动态规划)
自底向上迭代详细见dp图class Solution { public int minDistance(String word1, String word2) { int m = word1.length(); int n = word2.length(); int[][] dp = new int[m+1][n+1]; //base case for(int i = 0;i<=n;i++){原创 2022-03-29 20:27:54 · 670 阅读 · 0 评论 -
354. 俄罗斯套娃信封问题(Java动态规划)
拆分成两个子问题:对二维数组按照一定的方式排序 + LIS算法步骤:首先先对宽度进行升序排序,当遇到宽度相同的情况时,就按高度降序排序;之后把所有的高度作为一个数组,在这个数组上使用LIS然后…然后就超时了,这测试用例貌似是更新了但是大致的解法步骤和方向基本上是没有问题的class Solution { public int maxEnvelopes(int[][] envelopes) { int n = envelopes.length; Arrays.原创 2022-03-28 20:58:56 · 1268 阅读 · 0 评论 -
300. 最长递增子序列(Java动态规划LIS)
重点:设计算法逻辑进行状态转移借助数学归纳干,也就是举例子吧,随便取一个中间的例子分析,然后对应到第n个public int lengthOfLIS(int[] nums) { int[] dp = new int[nums.length]; Arrays.fill(dp,1); for(int i = 0;i<nums.length;i++){ for(int j = 0;j<i;j++){原创 2022-03-28 20:56:52 · 271 阅读 · 0 评论 -
322. 零钱兑换(Java、动态规划)
动态规划入门基础 最优子结构三种方法不断优化class Solution { int[] memo; public int coinChange(int[] coins, int amount) { //备忘录 // memo = new int[amount+1]; // Arrays.fill(memo,-666); //3、dp数组迭代 //dp数组 int[] dp原创 2022-03-27 21:12:53 · 593 阅读 · 0 评论 -
509. 斐波那契数(Java、动态规划)
动态规划入门基础 重叠子问题三种方法不断优化class Solution { //1、暴力 public int fib(int n) { if(n == 0||n==1){ return n; } return fib(n-1)+fib(n-2); } //2、备忘录 public int fib(int n) { int[] memo = new i原创 2022-03-27 20:05:02 · 662 阅读 · 0 评论 -
回溯框架总结(摘自labuladong的算法小抄)
形式一、元素无重不可复选,即 nums 中的元素都是唯一的,每个元素最多只能被使用一次,backtrack 核心代码如下:/* 组合/子集问题回溯算法框架 */void backtrack(int[] nums, int start) { // 回溯算法标准框架 for (int i = start; i < nums.length; i++) { // 做选择 track.addLast(nums[i]); // 注意参数转载 2022-03-27 16:43:10 · 129 阅读 · 0 评论 -
39. 组合总和(Java、回溯、结果无限制带重)
回溯框架base case:总和等于时添加res;大于时return使用 start 递归调用时把 i 自身传入即可实现重复取,又可以避免结果中相同的结果不同顺序出现的可能class Solution { List<List<Integer>> res = new LinkedList<>(); LinkedList<Integer> track = new LinkedList<>(); int sum = 0;.原创 2022-03-27 16:36:48 · 255 阅读 · 0 评论 -
47. 全排列 II(Java、回溯带重)
1、首先还是先干上回溯框架2、因为nums存在重复元素,所以还是先排个序3、新添加的剪枝逻辑,固定相同的元素在排列中的相对位置!(见注释)!class Solution { List<List<Integer>> res = new LinkedList<>(); LinkedList<Integer> track = new LinkedList<>(); boolean[] used; public Lis原创 2022-03-27 16:09:17 · 479 阅读 · 0 评论 -
94:二叉树的中序遍历
力扣94、二叉树的中序遍历给定一个二叉树的根节点 root ,返回它的 中序 遍历。输入:root = [1,null,2,3]输出:[1,3,2]输入:root = []输出:[]输入:root = [1]输出:[1]二叉树的遍历: 中序遍历:左 根 右 先序遍历:根 左 右 后序遍历:左 右 根法一:递归算法思路:/** * Definition for a binary tree node. * public class原创 2021-10-08 17:30:43 · 129 阅读 · 0 评论 -
40. 组合总和 II(Java、回溯带重)
简略要点(具体见前几篇回溯带重题)1、回溯2、带重3、避免超时,应及时剪枝详细见注释class Solution { List<List<Integer>> res = new LinkedList<>(); LinkedList<Integer> track = new LinkedList<>(); public List<List<Integer>> combinationSum2(i原创 2022-03-25 22:33:21 · 436 阅读 · 0 评论 -
90. 子集 II(Java)(回溯,带重)
本题难点nums含有重复元素1、进行排序后方便判断是否有相同元素2、回溯的for循环中的if语句!nums[i] == nums[i-1] 判断相同i>start详细见注释class Solution { List<List<Integer>> res = new LinkedList<>(); LinkedList<Integer> track = new LinkedList<>(); pub原创 2022-03-25 22:28:48 · 738 阅读 · 0 评论 -
77. 组合(Java)(回溯)
和78题没什么两样,只是加了一个限制条件,在对应层数跳出即可class Solution { List<List<Integer>> res = new LinkedList<>(); public List<List<Integer>> combine(int n, int k) { LinkedList<Integer> track = new LinkedList<>();原创 2022-03-25 22:21:32 · 457 阅读 · 0 评论 -
78. 子集(Java)(回溯,无重)
一道经典的无重复回溯算法回溯算法框架+避免重复的start变量皆可解决,详细见注释class Solution { List<List<Integer>> res = new LinkedList<>(); public List<List<Integer>> subsets(int[] nums) { LinkedList<Integer> track = new LinkedList<&g原创 2022-03-25 22:19:20 · 243 阅读 · 0 评论 -
51. N 皇后(回溯)(Java)
考察对回溯算法的运用学习的博客链接比起普通的回溯题:46. n皇后这题限制条件更多了但是总体框架还是一样的详细见注释class Solution { //1、定义结果集 List<List<String>> res = new ArrayList<>(); public List<List<String>> solveNQueens(int n) { //1、定义限制条件 bool原创 2022-03-25 00:54:42 · 516 阅读 · 0 评论