算法
文章平均质量分 62
算法笔记
linsy`
世上并无常青树,心中不负便胜朝朝暮暮
展开
-
动态规划——背包问题
01背包、完全背包、多重背包原创 2023-10-02 16:28:36 · 160 阅读 · 0 评论 -
动态规划问题
分治法:大事化小,逐一解决动态规划:记录前一部分的最优解,与后文进行比较力扣53 最大子数和 public int maxSubArray(int[] nums) { int maxSum = nums[0], thisSum = 0; for(int num : nums){ thisSum += num; if(thisSum > maxSum) maxSum = thisSum; ..原创 2023-05-08 19:25:24 · 304 阅读 · 0 评论 -
动态规划(接雨水、最长回文子串)
第一步遍历标记从左到右的最大值 **maxL[ ]** 和从右到左的最大值 **maxR[ ]**,第二步再从左到右(或从右到左)遍历计算雨水总量。第二步中:遍历到 i 时,选择 maxL[i] 与 maxR[i] 中的最小者减去当前高度 height[i] ,则为当前 i 列储存雨水量。原创 2023-04-27 20:45:49 · 98 阅读 · 0 评论 -
迷宫算法(DFS,BFS)
dfs深度优先,:也可以找多条路径中最短距离时,当大于10x10或出现的路径较多时,效率较差。dfs使用标记、回溯解决循环绕圈问题。只有当所有边的权重都相等时(即向西面移动的所消耗的权重相等),才用BFS。寻找从该点开始距离为 “1” 的可成功到达的点(并记录它到起点的距离),一层一层找。最多枚举所有点位,而bfs会重复枚举相同点位。这里使用对象数组模拟队列存储坐标。原创 2023-04-25 20:26:15 · 257 阅读 · 0 评论 -
DFS算法(皇后问题解)
主要思考顺序来遍历搜索(暴力搜索)=> 递归。排列数字:https://www.acwing.com/problem/content/844/如:追溯到倒数第二个节点(A点),标记为已使用,然后再往下找,到叶子节点(标记、输出),回溯到上一节点,取消叶子的标记,然后再回溯到上一节点,取消A点的标记,当前表示 i = 2 这个节点已经遍历,接着遍历 i= 3 这个节点。原创 2023-04-25 17:16:18 · 76 阅读 · 0 评论 -
单调队列-滑动窗口最优解
154. 滑动窗口 - AcWing题库左边是原数组,红框是画图窗口、右边是队列。这里我们采用队列存放值,而不存放原数组下标。求滑动窗口中的最小值:当窗口中左边的数大于右边,那么她永远不可能作为最小值输出,直接从队列里移除(先进先出)。而后进来的数比队尾的数小,则剔除队尾继续比较,直到该队列为”单调递增“位置。将每次滑动窗口最小的数放在队头,每次取最小值时取对头就行。最大值同理。import java.io.*;public class Main{ static int .原创 2022-04-16 18:16:21 · 103 阅读 · 0 评论 -
数据结构
数组模拟链表注意初始化时使用了数组的几个元素,让第k个数与数组下标对应,需要 k 加减 x。单链表AcWing826 单链表在k后插入值插入 ne[idx] = ne[k]; ne[k] = idx;双链表AcWing829 双链表在k的右节点插入一个数,若想在左边插入 add( l[k] , x ) r[idx] = r[k]; l[idx] = k; l[r[k]] = idx; ...原创 2022-11-16 10:55:45 · 131 阅读 · 0 评论 -
基础算法—
快速排序快排三要素:取值、换位、递归import java.util.Scanner;public class Main{ public static void main(String [] args){ Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] q = new int[n]; for(int i=0; i<n原创 2022-04-09 16:20:28 · 800 阅读 · 0 评论