算法学习笔记
文章平均质量分 87
cyoushika_Nara
这个作者很懒,什么都没留下…
展开
-
【从零开始的动态规划02】——双串问题dp[i][j],矩阵DP,无串线性DP
导语上一篇文章【从零开始的动态规划01】——单串问题dp[i]中,我们介绍了动态规划的定义,特征,和常见单串问题的总结。本篇我们将聚焦双串问题dp[i][j]。什么是双串问题?单串问题的输入为一个串,且每个子问题只与位置i有关(有时可能会添加一些指标k,变成dp[i][k],但位置终究是i),而双串问题的输入为两个串,长度分别为m和n,子问题需要用i和j两个变量表示,分别代表第一个串和第二个串考虑的位置dp[i][j]:=第一串考虑[0…i],第二串考虑[0…j]时原问题的解。拆解较大规模的子问题时原创 2022-01-05 23:48:22 · 979 阅读 · 0 评论 -
【从零开始的动态规划01】——单串问题dp[i]
1. 什么是动态规划?动态规划并非一种特定的算法,而是一种思想,即将一个大问题划分成子问题,并以子问题的答案推导出原问题的解。应用动态规划前,需要对子问题与原问题的关系,以及子问题之间的关系进行分析。这两个方面分别对应了“最优子结构”和“重复子问题”。动态规划的代码长度通常都不长,而难点在于,没有统一的公式或方法来确定最优子结构和重复子问题,因此常常变成“能想出来状态转移方程就能通过,想不出来就一直卡壳”的状况。对于这一点,除了多看经典动态规划问题,多写状态转移方程积累经验外,似乎没有更好的办法…a)原创 2022-01-03 13:39:07 · 775 阅读 · 0 评论 -
从零开始的深度优先搜索(DFS)
问题1: 什么是搜索?搜索,是一个动态的,收集信息,分析信息,保存信息的循环过程。在循环的过程中,我们根据已知的信息,对探索方向进行调整。根据选择探索方向的策略,我们将搜索大致划分为“广度优先搜索”(Breadth-First Search,简称BFS)和“深度优先搜索”(Depth-First Search,简称DFS),而本文主要介绍关于深度优先搜索(DFS)的相关知识和刷题总结。问题2:什么是深度优先搜索?深度优先搜索,是搜索的一种策略,我们从某一个位置出发,选定一个方向,不断地前进,深入探索,原创 2021-12-25 12:04:35 · 762 阅读 · 0 评论 -
从零开始的广度优先搜索(BFS)
关于广度优先搜索(BFS)的介绍和代码实现原创 2021-12-25 00:12:29 · 718 阅读 · 0 评论 -
从零开始的二叉树&堆(附模板)
树:一种有一个前驱节点,但是有多个后继节点链表结构,或者说是包含有限节点的层次关系的集合。a. 基本概念:节点的种类:根节点:一棵树只有一个,最重要,最初是的节点中间节点:非根节点,同时拥有前驱节点和后继节点的节点叶节点:只有前驱结点,没有后继节点的节点节点的关系:父子关系:如果两个节点直接相连,我们称更靠近根节点的节点为“父节点”,而称另一个节点为“子节点”兄弟关系:如果两个节点不直接相连,但是拥有相同的父节点,则称为“兄弟关系”祖孙关系:如果两个节点不直接相连,但一个节点是另原创 2021-12-18 23:10:52 · 277 阅读 · 0 评论 -
快慢指针求环入口问题:
1. 是否存在环:在寻找环入口之前,我们需要先判断是否存在环。判断的方式有很多,经典的方法就是快慢指针。所谓快慢指针,就是用两个指针,一个每次只移动一步,一个每次移动两步,移动块的指针我们称之为快指针,类似“斥候”,用于探路。如果快指针到达了空节点,那么说明不存在环,如果快慢指针相遇,则必定存在环。2. 环入口:先说结论,当快慢指针相遇后,我们将快指针重置回head头节点(或者重新设立一个位于head的指针),与慢指针同速率移动,二者相遇的地方就是环入口。证明:将链表分段,从开头到环入口的原创 2021-12-14 22:29:52 · 2043 阅读 · 0 评论 -
从《零钱兑换》开始的《背包问题》
1. 零钱兑换Leetcode里有这样一个问题,LeetCode322. 零钱兑换:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1 。你可以认为每种硬币的数量是无限的。对于每一枚硬币,我们都有两种选择:选or不选。而对于amount而言,它并不关心我们选择硬币的顺序,只要x+y能都等于amount,我们先选x还是先选y是没有区别的。因...原创 2021-12-14 22:10:48 · 614 阅读 · 0 评论