经典算法
包含各类经典算法问题以及算法思想总结
Maricat4
这个作者很懒,什么都没留下…
展开
-
二叉树的遍历
关于二叉树的遍历 深度优先遍历 先序遍历,先访问根节点,再访问子树。 中序遍历,先访问左子树(右子树),再访问根节点,后访问右子树(左子树)。 后序遍历,先访问子树,再访问根节点。 广度优先遍历 层次遍历,优先访问离根节点近的节点。 对于树节点的定义 struct TreeNode{ TreeNode* left; TreeNode* right; int val; TreeNode(int t = 0):val(t),left(nullptr),right(null原创 2020-08-16 12:31:55 · 167 阅读 · 0 评论 -
反转链表
反转链表 双指针 递归方式 struct ListNode{ ListNode* next; int val; ListNode(int t=0):val(t),next(nullptr){} }; ListNode* reverseList(ListNode* node){ ListNode *head = nullptr; //利用头插法进行反转 //head指向已反转好的第一个节点 //node指向未反转的第一个节点 //将node原创 2020-08-14 11:10:26 · 125 阅读 · 0 评论 -
最大连续子数组和与积
最大连续子数组和与积 和 问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 暴力求解法 对于一个整数数组,他所有的连续子树组的个数可以通过归纳求得: 以第1个元素为首的连续子数组有n个; 以第2个元素为首的连续子数组有n-1个; …… 以第n个元素为首的连续子数组有1个; 因此总共有:sum=∑i=1原创 2020-06-28 21:50:42 · 287 阅读 · 0 评论 -
LeetCode-1277统计全为 1 的正方形子矩阵
LeetCode-1277统计全为 1 的正方形子矩阵 题目:给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。 这是一个动态规划问题,有一些值得注意的地方。动态规划的思想就是将当前问题,拆成子问题,并且由子问题的值组合得到当前问题的值。这样我们就可以通过遍历小问题,得到我们想要的大问题的值。通常小问题的值,是很容易求得的。 一般来说,我们经常会保存最优值来组合得到更大问题的值。在这个问题中,最优值对求解更大问题的值却没有帮助,因此我们原创 2020-05-24 22:30:07 · 402 阅读 · 1 评论 -
堆、堆排序与优先队列
堆、堆排序与优先队列 堆(heap) 堆(Heap)是计算机科学中一类特殊的数据结构。堆通常用数组来实现。把堆近似看作一棵完全二叉树(最底层可能不是完全填满的,如下图),堆中结点的值总是不大于或不小于其父结点的值。 根结点最大的堆叫做最大堆或大根堆。 根结点最小的堆叫做最小堆或小根堆。 最小堆示例: 表示堆的数组AAA有两个属性:A.lengthA.lengthA.lengt...原创 2020-04-26 17:18:10 · 137 阅读 · 0 评论 -
0-1背包问题
0-1背包问题 背包问题(Knapsack Problem) 问题描述:一个旅行者准备随身携带一个背包,可以放入背包的物品有nnn种,物品jjj的重量和价值分别为wj,vj,j=1,2,…,nw_j,v_j,j=1,2,…,nwj,vj,j=1,2,…,n,如果背包的最大重量限制是bbb,怎样选择放入背包物品以使得背包的价值最大? 这是一个组合优化问题,设xjx_jxj表示装入背包的...原创 2020-04-23 09:21:23 · 671 阅读 · 0 评论 -
矩阵链相乘问题
矩阵链相乘问题 问题描述:考虑nnn个矩阵的乘积:A1A2…AnA_1A_2…A_nA1A2…An,确定最优的乘法顺序(最优括号化方案),使得标量(数值)乘法次数最少。其中,AiA_iAi为$ p_{i-1}⨯pi矩阵,矩阵,矩阵,i=1,2,…,n$。 对于两矩阵元素相乘,结果矩阵的每一个元素,由原先两矩阵的行列对应元素相乘。因此,假设假设A1为m×nA_1为m\times nA...原创 2020-04-03 17:16:45 · 1026 阅读 · 0 评论 -
最长公共子序列问题
最长公共子序列问题 问题描述:给定两个序列X,YX,YX,Y(可以把它们视作字符串),求他们的最长公共子序列。例如X="BCAB",Y="BDACB"X="BCAB",Y="BDACB"X="BCAB",Y="BDACB",其最长公共子序列为BCB,BABBCB,BABBCB,BAB。一个给定序列的子序列,就是将给定序列零个或多个元素去掉之后的序列。例如X="BAC"X="BAC"X="BAC...原创 2020-04-02 11:01:17 · 118 阅读 · 0 评论 -
钢条切割问题
钢条切割问题 问题描述:给定一段长度为n英寸的钢条和一个价格表pi(i=1,2……,n)p_i(i=1,2……,n)pi(i=1,2……,n),求切割钢条方案,使得收益rnr_nrn最大。(假设切割工序本身没有成本支出) 价格表样例: 长度iii 1 2 3 4 5 6 7 8 9 10 价格pipipi 1 5 8 9 10 17 17 20 24 30 假设收益长度为n...原创 2020-04-01 21:09:49 · 197 阅读 · 0 评论