数据结构与算法
Aaron_Yang.
大三软件工程在读,欢迎学习交流,一起进步
展开
-
最长单调子序列问题
代码:#include<iostream>#include<vector>#include <algorithm>using namespace std;const int maxn = 1001;int dp[maxn];//vector<int>nums = { 10,9,2,5,3,7,101,18 };//vector<int>nums = { 0, 1, 0, 3, 2, 3 };vector<int>nu原创 2021-11-09 11:02:22 · 276 阅读 · 0 评论 -
0-1背包问题笔记
笔记:代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1001;int w[5] = { 0 , 2 , 3 , 4 , 5 }; //商品的体积2、3、4、5int v[5] = { 0 , 3 , 4 , 5 , 6 }; //商品的价值3、4、5、6int dp[4][4] = { 0 }; //代表当前背包容量j,前i件物品最佳物品对应的价值int n = 4;原创 2021-11-09 10:24:26 · 248 阅读 · 0 评论 -
二分法的两种常用模板
单调递增序列中找x或者x的后继「在单调递增序列中找x 或者x的后继」,即在单调递增数列a[]中查找某个数x,如果数列中没有x,则找比它大的下一个数。前面所给出的bin_ search() 函数就是「在单调递增序列中找x或者x的后继」的模板代码。二分法有很多编码方法,这里给出的区间是左闭右开的编码,即[0, n)。也可以直接对[0,n- 1]区间二分,代码略有不同。模板代码:int bin_search(int *a, int n, int x){ //a[0]~a[n-1]是单调递增的原创 2022-02-13 15:08:42 · 371 阅读 · 0 评论 -
POJ 1505 题解
Description:Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a book and after several months he finished its copy. One of the原创 2021-10-12 09:53:44 · 369 阅读 · 0 评论 -
建立二叉树详解版(先序序列+中序序列 && 中序序列+后序序列)
问题一:如何根据先序序列+中序序列建立二叉树?输入样例:第一行输入序列长度n,第二行输入n个字符表示二叉树先序遍历的序列,第三行输入n个字符表示二叉树中序遍历的序列9ABDGHCEFIGDHBAECIF输出样例:输出二叉树后序遍历的序列。GHDBEIFCA思路:一道非常基础的二叉树问题,而解决这类问题是有模板的。也就是根据遍历顺序来入手,即可解决。在创建左子树和右子树的时候,对边界点会有疑问,我比较推荐自己画一个图,这样可以定位到你要的那个点。(这里数字顺序与遍历无关,只是为了定位原创 2021-07-22 16:59:50 · 2875 阅读 · 0 评论 -
LeetCode62:不同路径(深搜 && 动态规划)
题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths示例:提示:1 <= m, n <= 100题目数据保证答案小于等于 2 * 109解法一:(深搜)会超时思路:&nbs原创 2021-07-16 16:16:35 · 354 阅读 · 0 评论 -
LeetCode509:斐波那契数列(动态规划入门)
题目:斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。示例:思路: 以往我们面对这类题是通过递归解法,return function(n-1)+function(n-2)。但是现在,我们通过动态规划来解原创 2021-07-16 16:13:56 · 334 阅读 · 0 评论 -
二叉树题目中选择什么遍历顺序
涉及到⼆叉树的构造,无论普通⼆叉树还是⼆叉搜索树⼀定前序,都是先构造中节点求普通二叉树的属性,⼀般是后序,⼀般要通过递归函数的返回值做计算。求二叉搜索树的属性,⼀定是中序了,要不然就白瞎了有序性了。 注意在普通二叉树的属性中,我用的是⼀般为后序,例如单纯求深度就用前序, 二叉树:找所有路径也用了前序,这是为了方便让父节点指向子节点。 所以求普通二叉树的属性还是要具体问题具体分析。...原创 2021-07-15 20:05:28 · 119 阅读 · 0 评论 -
二叉树的深度优先遍历(递归法)
二叉树的结构体定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, Tree原创 2021-07-13 19:57:22 · 525 阅读 · 0 评论 -
KMP算法之next数组
在KMP算法中有个数组,叫做前缀数组,也有的叫next数组,每一个子串有一个固定的next数组,它记录着字符串匹配过程中失配情况下可以向前多跳几个字符,当然它描述的也是子串的对称程度,程度越高,值越大,当然之前可能出现再匹配的机会就更大。 这个next数组的求法是KMP算法的关键,能不能掌握它非常的重要。package com.southwind;public原创 2021-07-09 21:02:40 · 267 阅读 · 0 评论 -
字符串匹配——BF算法与KMP算法(java详解版)
BF算法:BF算法即暴力(Brute Force)算法,是普通的模式匹配算法。BF算法的思想:将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。package com.southwind;public class BF { //暴力匹配 public static void main(String[] args)原创 2021-07-09 20:15:44 · 1171 阅读 · 0 评论