
算法
文章平均质量分 77
算法相关的一些学习笔记,知识点
爱上布洛格的鸭鸭
这个作者很懒,什么都没留下…
展开
-
单调栈算法详解
单调栈算法详解单调栈使用模板stack<int> st;//此处一般需要给数组最后添加结束标志符,具体下面例题会有详细讲解for (遍历这个数组){ if (栈空 || 栈顶元素大于等于当前比较元素){ 入栈; }else{ while (栈不为空 && 栈顶元素小于当前元素){ 栈顶元素出栈; 更新结果; } 入栈; }}或者简化原创 2021-11-23 11:10:21 · 1601 阅读 · 0 评论 -
滑动窗口算法详细讲解笔记
滑动窗口算法详细讲解笔记文章目录滑动窗口算法详细讲解笔记导言篇什么是滑动窗口?什么场景下使用滑动窗口?滑动窗口通用模板:第一篇: 题解分析篇题目:1 无重复字符的最长子串问题 : 对应LeetCode的第3题2 串联所有单词的子串 : 对应LeetCode的第30题3 最小覆盖子串 : 对应LeetCode的第76题4 给定一个字符串 s ,找出至多含两个不同字符的最长子串 t :对应LeetCode的第159题5 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 t :对应LeetCo原创 2021-11-17 14:45:50 · 3450 阅读 · 0 评论 -
二分查找算法详细汇总
二分查找算法详细汇总文章目录二分查找算法详细汇总二分查找算法介绍模板算法思想举例说明模板实现(1)递归方式实现(2)非递归方式实现二分查找问题相关难点问题1[前缀和 + 二分查找 + 带你飞跃这三题]LeetCode1011. 在 D 天内送达包裹的能力[中等题]问题描述:题解1:代码:题解2:代码:LeetCode875. 爱吃香蕉的珂珂[中等]问题描述:题解:LeetCode410. 分割数组的最大值[困难]问题描述:题解:新式二分查找问题我们从剑指的第11题入手: 剑指 Offer 11. 旋转数组原创 2021-11-10 10:32:19 · 714 阅读 · 0 评论 -
递归算法问题详细讲解总结笔记
递归算法问题详细讲解总结笔记文章目录递归算法问题详细讲解总结笔记1.递归的概念2.DFS的概念图解DFS3.递归问题汇总3.1 迷宫问题(来源于算法课程)题目描述:求解步骤:3.2 匹配路线问题,即单词搜索问题:对应LeetCode的79题题目描述:题目分析:具体步骤:java代码实现:3.3 王子找公主问题(趋势科技笔试题)问题描述:3.4 N皇后问题[重点! ! !]:对应LeetCode的51,52题8皇后问题问题分析:代码实现:N皇后问题:对应LeetCode的51题N皇后问题II:对应LeetC原创 2021-11-02 14:59:58 · 746 阅读 · 0 评论 -
并查集算法最全最详细讲解
并查集算法最全最详细讲解1.并查集介绍:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题例如: 给我们一个图结构,其中存在六个顶点: 1,2,3,4,5,6,我们要求将相连或者间接相连的顶点进行分组保存,此时,就需要使用到并查集,它的主要方法有两个:(1) union(x,y) : 合并两个顶点的方法(2)find_parent(x): 查找x顶点的父节点的方法我们进行以下图解分析并查集的使用:图解分析并查集:并查集数据结构通用模板java原创 2021-10-29 11:14:41 · 3081 阅读 · 0 评论 -
图的常见算法汇总笔记(包括图的DFS,BFS,Dijkstra算法,Floyed算法,Prim算法,Kruskal算法)
图的常见算法汇总笔记1. 图的概念:图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:其中:2. 图的表示方式:第一种表示方式:二维数组表示(邻接矩阵):第二种表示方式:链表表示(邻接表):注意:我们一般在算法题中采用邻接矩阵的形式存储图的顶点,边的信息3. 图的实现:我们这里使用邻接矩阵创建一个简单的图,里面包括图的一些基本的API:插入一个顶点的方法添加一条边的方法获取两个顶点之间的权值的方法获取边的个数原创 2021-10-28 16:55:26 · 4113 阅读 · 0 评论 -
贪心算法问题总结
贪心算法问题总结文章目录贪心算法问题总结1贪心算法介绍2.贪心算法典型例题讲解1 电台覆盖问题题目描述:思路分析:第一步:第二步:第三步:第四步:第五步:代码实现:55. 跳跃游戏I思路1:覆盖上色方法图解:代码实现:思路2:贪心算法实现代码实现:思路3:反向查找法45. 跳跃游戏II贪心算法实现1:(反向查找)图解:代码实现:贪心算法实现2(正向查找):图解:代码实现:763. 划分字母区间问题思路分析:贪心+双指针代码实现:11. 盛最多水的容器题解:122. 买卖股票的最佳时机 II思路1:动态规划原创 2021-10-26 11:16:15 · 961 阅读 · 0 评论 -
二叉树笔记算法笔记汇总
二叉树笔记算法笔记汇总这里汇总的是普通的二叉树常见题型,二叉搜索树等高级二叉树题型单独总结,在后面进行讲解1. 重建二叉树问题问题描述:问题分析1:代码实现1://定义中序,后序遍历数组属性int[] inorder;int[] postorder;//定义属性post_idx记录每一次的根结点位置int post_idx;//定义一个hashmap:存储中序遍历HashMap<Integer,Integer> idx_map = new HashMap<&原创 2021-10-21 20:55:02 · 339 阅读 · 0 评论 -
LeetCode每日一题之38_外观数列
LeetCode38. 外观数列题目链接给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是原创 2021-10-15 10:35:11 · 185 阅读 · 0 评论 -
链表算法问题总结
链表算法问题笔记文章目录链表算法问题笔记反转链表1题目:代码:反转链表2题目:题解:代码:倒数第k个节点问题代码:删除排序链表的重复项1题目:代码:删除排序链表的重复项2:题目:代码:合并两个链表:问题:代码:合并多个链表:问题:代码:环形链表问题:问题描述:问题分析:第一个问题:是否存在环?第二个问题:找到该环形链表的入口节点?问题1的java代码实现:问题2的java代码实现:JavaScript代码实现:逆序打印链表问题:问题:代码:重排链表问题:问题:代码:旋转链表问题:问题:代码:复制带有随机指原创 2021-10-15 10:12:04 · 1089 阅读 · 0 评论 -
背包问题总结(涵盖0-1背包问题,完全背包问题,背包方案数问题等)
背包问题总结背包问题介绍背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?它是在1978年由Merkel和Hellman提出的。如下我分别总结了0-1背原创 2021-10-13 10:05:27 · 4339 阅读 · 2 评论 -
动态规划算法详细讲解(涵盖典型LeetCode对应的题目)
动态规划算法详细讲解(涵盖典型LeetCode对应的题目)文章目录动态规划算法详细讲解(涵盖典型LeetCode对应的题目)1.动态规划介绍2.动态规划经典问题汇总2.1 两个序列的最长公共子序列问题(LCS问题):对应LeetCode的1143题具体题型:题目分析:扩展:输出一组最长公共子序列代码实现:补充 : 最长连续公共序列的实现2.2 最长递增子序列个数问题(LIS问题)LCIS问题:最长连续递增序列:对应LeetCode的674题LIS问题描述:对应LeetCode的673题题目分析2.3 背包原创 2021-10-13 09:58:50 · 744 阅读 · 0 评论 -
LeetCode42. 接雨水问题
LeetCode42. 接雨水问题LeetCode地址给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == hei原创 2021-09-14 15:47:47 · 570 阅读 · 1 评论 -
任务并发数问题 - 字节笔试题
任务并发数问题 - 字节笔试题小M的程序设计大赛大作业是编写一个多任务的下载器,在做到计算任务并发数的时候遇到了困难。在一次下载中,总共包含N个任务,每一个任务会在第x秒开始,并持续y秒。小M想知道,在一次下载中,同时最多会有多少个任务正在下载。输入描述:第一行输入一个正整数N,代表共有N个任务之后共有N行,每行包含两个正整数x,y,其中,x代表任务开始的时间,y代表的是任务需要持续的时间输出描述:输出包含一个正整数,代表最高的任务并发数示例1:输入:41 22 33 5原创 2021-09-14 14:37:56 · 646 阅读 · 0 评论 -
任务调度器问题 - 对应LeetCode621题
任务调度器问题 - 对应LeetCode621题LeetCode621题地址给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。示原创 2021-09-14 14:14:10 · 275 阅读 · 0 评论 -
去除连续字典序字符串问题
去除连续字典序字符串问题问题描述给定你一个字符串,要求去除里面的字典序连续的字符串例如“ecdfgba”,我们首先去除“cd”,此时字符串为“efgba”,继续去除“efg”,最后得到“ba”思路分析这道题的最优解法应该是使用栈的思想,我们遍历字符串,如果字符串为空,则直接将其入栈,如果不为空,我们获取栈顶元素,查找此时后面有没有和它构成字典序连续的字符串,有的话则将栈顶元素pop出来,并将指针指向下一个不为连续字典序的位置代码实现package com.feng;import java原创 2021-09-12 10:19:54 · 282 阅读 · 0 评论 -
顺丰科技笔试问题之最多的分值个数问题
最多的分值个数问题问题描述输入n个数,我们按照顺序遍历,可以选择取或者不取,取的话会得到对应的分值,如果分值小于0则退出循环求:我们遍历这个数组,保证在退出时,能够获得最多的分值个数示例:输入:64 -4 1 -3 1 -3输出:5 解析:我们选择取第1,3,4,5,6个分值,最多可以取5个代码实现:public class Main { public static void main(String[] args) { Scanner in = new Sc原创 2021-09-06 21:08:32 · 291 阅读 · 0 评论 -
LRU缓存机制-Java代码实现
LRU 缓存机制LeetCode146题运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容原创 2021-09-05 10:38:08 · 337 阅读 · 0 评论 -
LeetCode856. 括号的分数问题
856. 括号的分数https://leetcode-cn.com/problems/score-of-parentheses/给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: "()"输出: 1示例 2:输入: "(())"输出: 2示例 3:输入: "()()"输出: 2示例 4:输入: "(()(()原创 2021-08-31 20:59:30 · 271 阅读 · 1 评论 -
LeetCode常见的回文串问题汇总
回文串问题125. 验证回文串 — 简单题leetocode链接给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。**说明:**本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串提示:1 <原创 2021-08-27 19:09:07 · 338 阅读 · 0 评论 -
排序算法汇总
排序算法汇总文章目录排序算法汇总1.各种排序算法比较2.交换类型排序算法2.1冒泡排序算法 Bubble Sort2.2快速排序算法 Quick Sort快速排序思想:总结:java代码实现上面三种形式的快速排序3.插入类排序算法 Insert Sort3.1 直接插入排序算法 Direct Insert Sort图解arr={8,5,7,2,9,3,1}的直接插入排序过程java代码实现直接插入排序算法3.2 希尔排序算法 Shell Sort希尔排序算法:基本实现思想:java代码实现:4.选择类排序原创 2021-07-31 16:09:49 · 150 阅读 · 0 评论