算法/数据结构/刷题
文章平均质量分 69
算法/数据结构/刷题leetcode等
zkFun
热爱学习,持续产出。
展开
-
❗⭕⭕算法子串链表的好伴侣——滑动窗口双指针
加个封面文章目录1 问什么用双指针,不用dp?2 基本框架3 子串例题3.1 最小覆盖子串3.2 字符串排序3.3 找所有字母的异位词3.4 最长无重复子串4 链表中的双指针4.1成环4.2 成环入口4.3 三等分点4.4链表倒数第K个1 问什么用双指针,不用dp?对于数组子串这种连续问题解,优先应考虑双指针。没有明显的状态转移,前后的依赖关系,考虑双指针解法。至于不连续的子问题解,即为子序列问题,一般使用动态规划来解决,要求更为苛刻,同时也能解决一些子串问题,详情见另一篇博客。能用双指针不原创 2021-03-17 16:32:06 · 363 阅读 · 0 评论 -
❗⭕⭕拆解LRU算法
文章目录一、从底层开始搭建1. 双向链表节点类2. 双链表类3. LRU类二 、使用LinkedHashMap一、从底层开始搭建1. 双向链表节点类class Node { public int key, val; public Node next, prev; public Node(int k, int v) { this.key = k; this.val = v; }}2. 双链表类class DoubleList {原创 2021-03-16 16:45:49 · 201 阅读 · 0 评论 -
❗⭕⭕算法老大哥——动态规划!
1 简介包含递归思想,贪心只是动态规划的一个特例一般分为自底向上和自上到下的写法,注意2 简单的动态规划2.1斐波那契数列解法一:递归int fib(int N) { if (N == 1 || N == 2) return 1; return fib(N - 1) + fib(N - 2);}解法二:带备忘录的递归int fib(int N) { if (N < 1) return 0; // 备忘录全初始化为 0 vector<in原创 2020-12-29 14:35:26 · 754 阅读 · 0 评论 -
❗⭕⭕算法——查找(顺序,二分,裴波那契,题解)
1 介绍2 顺序(线性)查找2.1 思想遍历,发现相同值返回2.2 代码public static int seqSearch(int[] arr, int value) { for (int i = 0; i < arr.length; i++) { if(arr[i] == value) { return i; } } return -1; }3 二分查找3.1 思想待查找的数组有序或者部分有序要求时间复杂度低于O(n),或者直接要求时间复杂原创 2020-09-28 21:04:53 · 210 阅读 · 0 评论 -
❗⭕⭕算法——排序(直接插入,希尔,简单选择,堆排序,冒泡,快排,归并,基数)
文章目录1 介绍1.1 八大排序分类1.2 时间复杂度1.3 空间复杂度2 插入排序-直接插入3 插入排序-希尔排序4 选择排序-简单选择排序5 选择排序-堆排序6 交换排序-冒泡排序7 交换排序-快速排序8 归并排序9 基数排序1 介绍1.1 八大排序分类1.2 时间复杂度图片来自于网络1.3 空间复杂度一个算法运行时,临时占用存储空间大小的度量,与解决问题的规模n有关,n较大时,会占用较多存储单元,例如快速排序和归并排序。主要讨论时间复杂度,更看重执行速度,缓存产品(r原创 2020-09-18 20:56:29 · 1027 阅读 · 0 评论 -
Python常用做题笔记
python做题常用原创 2023-09-14 16:35:26 · 216 阅读 · 0 评论 -
技巧题(时间戳计算天数)
目录1 输入时间戳如20210704计算是一年的第几天1 输入时间戳如20210704计算是一年的第几天public class calader_to_days { public int date_data(int input){ int year = input / 10000; int month = input / 100 % 100; int day = input % 100; int[] days = new原创 2021-07-04 16:47:03 · 1266 阅读 · 0 评论 -
携程2021.4.1笔试(1.sql语句中特定字段查找,2.回溯暴搜、动规)
文章目录题目一题目二题目一题目:从sql语句中找到真实的表名称,可能会起别名,但是要的是表的全称分析:找from、 left join、right join等单词后面的真实表名称,可以用正则表达式查找关键词或者用kmp有限状态机查找关键词题目二题目携程商旅最近上线了一批优惠权益套餐,作为公司的一名采购, 为了降低公司差旅出行成本, 你决定购买员工使用频率较高的各项权益, 因此需要决定购买哪些套餐,不仅需要覆盖要求的具体权益项, 同时确保成本最低.携程商旅提供n种不同的权益: 酒店原创 2021-04-01 21:26:21 · 361 阅读 · 2 评论 -
❗⭕⭕算法——单调栈
文章目录1 简介2 例题2.1 下一个更大元素2.2 再过多少天升温2.3 环形数组的下一个更大元素2.4 柱状图中最大的矩形1 简介详情单调栈:每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)使用场景:找第一个大于他的元素,第一个小于他的元素。左右边界都可以。2 例题2.1 下一个更大元素题目leetcode496给你一个数组,返回一个等长的数组,对应索引存储着下一个更大元素,如果没有更大的元素,就存 -1。分析找第一个大于自己的数,首先找肯定是往后找,所以原创 2021-03-29 11:01:48 · 367 阅读 · 0 评论 -
⛔⛔⛔数据结构——图
文章目录1 图的定义2 图的遍历3 例题3.1 有向无环图的所有路径1 图的定义详情图是树的一种图一般用邻接表和邻接矩阵邻接表,好处是占用的空间少,邻接表无法快速判断两个节点是否相邻邻接矩阵需要更多的存储空间,判断结点是否相邻效率高。有向图,如图所示两种表示方法有权有向图:对有向图进行加权:邻接表,我们不仅仅存储某个节点x的所有邻居节点,还存储x到每个邻居的权重。邻接矩阵,matrix[x][y]不再是布尔值,而是一个 int 值,0 表示没有连接,其他值表示权重。原创 2021-03-26 17:11:02 · 227 阅读 · 0 评论 -
➰数据➰结构➰算法➰系列➰博文➰索引➰
文章目录==数据结构==1 树2 链表==算法==排序数据结构1 树2 链表算法排序查找回溯动态规划原创 2021-03-19 17:01:07 · 857 阅读 · 0 评论 -
❗⭕⭕算法——回溯(暴力穷举所有情况)
文章目录1 模板2 例题2.1 全排列问题2.2 组合问题2.3 N皇后问题2.4 括号生成2.5 不重复的所有子集2.6 数独问题1 模板回溯详解请输出所有组合/情况写backtrack函数时,需要维护走过的「路径」和当前可以做的「选择列表」,当触发「结束条件」时,将「路径」记入结果集可以使用Linkedlist removeLast来实现撤销操作。result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(原创 2021-03-19 16:57:35 · 461 阅读 · 0 评论 -
ACM常用技巧Java(输入输出、排序、大数、格式转换、进制运算)
文章目录package com;import java.math.BigInteger;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.*;public class acm { public static void main(String[] args) { acm acm = new acm(); //acm.format();原创 2021-03-17 21:17:35 · 397 阅读 · 1 评论 -
⛔⛔⛔数据结构——链链链链表表表表
文章目录1链表定义1链表定义ACM模式下注意抽象出自己的链表结点// 单链表节点的结构public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}原创 2021-03-15 10:42:42 · 362 阅读 · 0 评论 -
❗⭕⭕算法——并查集
文章目录1 并查集简介2 并查集模板3 例题1 并查集简介主要就是集合问题,两个节点在不在一个集合,也可以将两个节点添加到一个集合中。检查无向树形图中存在的环2 并查集模板int n = 1005; // 节点数量3 到 1000int father[1005];// 并查集初始化void init() { for (int i = 0; i < n; ++i) { father[i] = i; }}// 并查集里寻根的过程int find(in原创 2021-01-13 11:54:36 · 147 阅读 · 0 评论 -
算法——搜索(最短路径BFS与DFS)
BFS与DFS原创 2020-12-26 21:02:12 · 1606 阅读 · 0 评论 -
⛔⛔⛔数据结构——树树树树树树树树树树树树树树树树
文章目录1递归1.1 核心代码,树的高度深度104⭐⭐⭐变形1:110判断平衡树<--深度变形2:543树的路径和<--某点的左右子树的深度和226自上而下翻转树左右子树617合并两个树,自上而下构建新结点递归合并112 判断路径和==某个数?:从上往下,减去结点值递归往下找437统计路径和==某个数?(不一定以 root 开头):遍历所有结点的时候都认为是从根结点开始,然后把路径数加到一起1116873375.2 核心代码,同树判断变形1:572子树判断572变形2:101 树的对称1015.原创 2020-12-24 18:06:11 · 939 阅读 · 1 评论 -
JAVA常用做题笔记
1.ArraysArray.sort(Object[] array) 对数组按照升序排序Arrays.fill(Object[] array,Object object) 可以为数组元素填充相同的值Arrays.toString(Object[] array) 返回数组的字符串形式2.声明2.1 数组2.2 HashMap Map<String> hashMap = new HashMap<String>();注释:Map是HashMap的父类,父类的引用指向子原创 2020-12-13 15:50:40 · 492 阅读 · 0 评论 -
JAVA数据结构笔记leetcode3(图)
文章目录1 概念2 表示3 BFS4 DFS多对多关系,就用到了图1 概念2 表示3 BFS4 DFS原创 2020-09-14 16:24:24 · 248 阅读 · 0 评论 -
数据结构——树基本知识(遍历,堆排序,赫夫曼树,BST,AVL,B树,B+,B*,2-3树)
一.树关于dfs和bfsdfsvoid dfs(TreeNode root) { if (root == null) { return; } dfs(root.left); dfs(root.right);}bfs:层序遍历、最短路径问题(也可使用Dijkstra 算法)102、1062void bfs(TreeNode root) { Queue<TreeNode> queue = new ArrayDeque<>原创 2020-05-13 22:13:19 · 783 阅读 · 0 评论 -
数据结构和leetcode刷题笔记
1.cprintf("%f\n",fabs(aa)); 取绝对值的类型必须指定float int会编成02 位运算必须赋值自身不改变位操作参考:https://www.cnblogs.com/nibuyaoni/p/5547795.html原创 2019-09-12 20:59:15 · 260 阅读 · 0 评论