Algorithm
文章平均质量分 72
肌肌腹肌肌
这个作者很懒,什么都没留下…
展开
-
前缀树 - Java 实现
前缀树介绍及 Java 实现原创 2023-01-08 11:04:25 · 249 阅读 · 0 评论 -
Java 实现大根堆
堆是一种比较常见的数据结构,在 Java 里有 PriorityQueue 就是堆的一种实现,自己代码实现堆结构有助于更好地理解这种数据结构,以便于我们能够更好地去运用它。原创 2023-01-03 10:35:04 · 1462 阅读 · 0 评论 -
常用代码小技巧
代码技巧汇总,持续更新原创 2022-12-20 10:34:41 · 76 阅读 · 0 评论 -
并查集模版
并查集模版原创 2022-12-07 22:30:03 · 78 阅读 · 0 评论 -
最短路算法 - dijkstra
最短路径算法原创 2022-11-26 16:19:04 · 382 阅读 · 0 评论 -
买卖股票的最佳时机系列
力扣——买卖股票的最佳时间原创 2022-04-18 09:31:00 · 822 阅读 · 0 评论 -
求一维数组中,不大于 k 的最大子数组的和
求一维数组中,不大于 k 的最大子数组的和1. 题目简述2. 思路3. 代码1. 题目简述给定一个整形数组 nums 和一个整数 k,其中数组中的数有正有负。请你找到一个最大的子数组的和,并且这个和不能大于 k。2. 思路如果是找子数组的和等于 k ,那么就是 LC 的第 560 题:560. 和为 K 的子数组。但是本题要找和不大于 k ,且要最大的。3. 代码private int getMaxSubarraySumNoMoreThanK(int[] nums, int k) { i原创 2022-04-16 11:24:50 · 582 阅读 · 0 评论 -
前缀和算法
前缀和算法1 一维前缀和1.1 模版2 二维前缀和2.1 模版2.2 题目2.2.1 二维区域和检索 - 矩阵不可变1 一维前缀和1.1 模版2 二维前缀和2.1 模版// 预处理前缀和数组{ sum = new int[n + 1][m + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { // 当前格子(和) = 上方的格子(和) + 左边的格原创 2022-04-14 07:51:53 · 119 阅读 · 0 评论 -
链表快慢指针模版
链表快慢指针模版1 找中点2 找环(待续)1 找中点笔者这几天在回顾链表的相关题目,发现快慢指针很好用,在做链表相关的题目时经常用到。比如今天有道题需要将链表从中间断开成两段,且前半段长度 >= 后半段长度。开始使用快慢指针的朴素写法(法1),发现需要在推出循环的时候根据链表的节点个数判断中点是那个以及从哪个节点进行断联操作,后来翻看做题记录发现法2更简洁,特此记录法1:// 从中间断开链表,并返回后半段的头节点private ListNode getMid(ListNode head)原创 2022-04-02 17:19:38 · 732 阅读 · 0 评论 -
二维数组旋转
二维数组旋转1 数组顺时针旋转 90 度1.1 思路1.2 代码实现1.3 LC 题目1 数组顺时针旋转 90 度1.1 思路整体思路:先沿主对角线进行交换,然后每一行再反转。沿着主对角线交换(下图中蓝色的即为主对角线)每一行反转(如下图的第一行,原来为1、4、7,反转之后变为 7、4、1)最终的 [[7, 4, 1,],[8, 5, 2], [9, 6, 3]] 即为所求1.2 代码实现public void rotate(int[][] matrix) { i原创 2022-03-26 14:23:04 · 934 阅读 · 2 评论 -
数组中的重复问题
本文将介绍 LeetCode 常见的一些数组问题,这些数组的特定都是长度为 n ,数组元素在 [1,n] 之间。本文将总结一些针对这些特点数组的套路!原创 2022-02-20 15:19:57 · 713 阅读 · 0 评论 -
我的滑动窗口——在困难的力扣题上提交提交
滑动窗口从入门到精通,工作之余慢慢补充,喜欢的朋友可以先点个(赞)关注!!原创 2022-01-25 21:52:39 · 223 阅读 · 0 评论 -
单调栈和单调队列及其数组实现——Java版
1. 介绍单调栈/单调队列的应用场景;2. 使用数组实现单调栈/单调队列,提高对数据结构的理解并提升效率原创 2022-01-22 21:44:19 · 2423 阅读 · 0 评论 -
二分法从入门到入骨
帮助大家摆脱二分法各种边界场景判断的痛苦,尝试用一套二分模版应对各种场景原创 2022-01-14 17:07:37 · 310 阅读 · 0 评论 -
吊打链表系列
一起学习链表吧,随便把力扣题目都刷一遍原创 2021-12-27 13:30:35 · 601 阅读 · 0 评论 -
算法入门之排序算法
算法入门之排序算法堆排序堆排序相较于堆排序这种排序算法,堆这种数据结构更为重要/** * @Author Jason * @Date 2021/9/11 11:09 上午 * @Description 堆排序 * 1、 建立(大根)堆,每一个元素跟其父元素进行比较,如果比父元素大就替换父元素 * 2、 得到堆顶元素,为最大元素 * 3、 去掉堆顶,将堆最后一个元素放置到堆顶 * 4、 调整堆结构,堆顶为第二大元素 * 5、 重复3、4步骤,直至堆变空 */public class原创 2021-12-10 19:13:39 · 740 阅读 · 0 评论 -
动态规划——编辑距离系列问题
动态规划——编辑距离系列问题1 概述2 实战2.1 判断子序列2.2 不同的子序列1 概述编辑距离原题——72. 编辑距离,是LeetCode上的一道 hard 级别的题目,该题允许对两个字符串进行增删改(没有查)的操作,而一些类似的题目可能操作起来没有这道题这么复杂,但是也可利用同样的思路去做,因此我们把这些题型提取出来,当作一个知识点来做巩固。下面将按照由易到难的顺序来依次解决这些题目,当然有一些题目也可以用贪心等思想去做,但是由于本文着重讲解动态规划算法,所以涉及到其它的算法暂不作讨论。2 实战原创 2021-10-31 17:53:36 · 696 阅读 · 0 评论 -
动态规划——01背包
动态规划——01背包问题抽象:一堆东西(数值),按照一定的组合方式,能否凑成某种最值状态,或者凑成某种状态的方法数。dp 数组的定义:int[] dp = new int[bagSize];dp[j] 递推公式:如果求背包能装的最大重量:dp[j] = Math.max(dp[j], dp[j - nums[i]]);如果求装满容量为 j 的背包的方法数:dp[j] = dp[j] + dp[j - nums[i]];dp 数组初始化遍历顺序:物品正序,背包倒序(防止物品多次放入)原创 2021-10-27 09:08:23 · 2134 阅读 · 1 评论 -
动态规划——最长子序列、子串问题
动态规划——最长(连续)子序列问题0 未完成,待续1. 概述2. 最长子序列(不要求连续)3. 最长连续子序列0 未完成,待续1. 概述其实本问题有两大类,一类是要求连续的,一类是要求不连续的。先来看子序列与子串的区别,已知原数组为 1, 2, 4, 3, 7, 6, 5] ,则:[1, 2, 4] 为原数组的子串,三个元素收尾相连,中间没有别的元素;[1, 3, 5] 为子序列,各个元素之间可能隔着别的元素。2. 最长子序列(不要求连续)3. 最长连续子序列一维数组,动规数组定义为原创 2021-10-25 10:10:25 · 1672 阅读 · 0 评论 -
回溯算法总结——团灭组合、排列、切割、N皇后等问题
回溯算法总结1. 概述1. 概述回溯大体分为:组合、排列、子集、切割、搜索几种类型类型题目链接思路组合77.组合 39.组合总和 40. 组合总和 II 216. 组合总和 III46. 全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]思路:排列由于需要把数组中的数字(1、原创 2021-10-19 21:07:53 · 182 阅读 · 0 评论