摘要: 0-1背包问题理解 问题内容:有i种类型的物品,它们的重量和价值分别是weight[i]和value[i],每种物品数量只有一个。现在,有一个容量为j的背包,如何装取物品,使得背包价值最大? 解题思路:典型的动态规划问题。 1.确定dp数组含义:dp【i】【j】任取【0~i】的物品放进背包的容量为j 阅读全文
posted @ 2022-04-05 17:26 Whp_bicycle 阅读(167) 评论(0) 推荐(0) 编辑
摘要: Leetcode之 重叠区间 (最少数量箭引爆气球) 1.重叠区间:一组二维数组,它的0列是开始,1列是结束。最少要删除多少个子数组,各子区间才不重叠 方法一:直接记录交叉区间个数 static bool cmp(vector<int>& a, vector<int>& b) { return a[ 阅读全文
posted @ 2022-04-05 17:25 Whp_bicycle 阅读(293) 评论(0) 推荐(0) 编辑
摘要: LeetCode 之135.分发糖果问题 N个数为一排,每个位置至少加1,相邻两个数评分更高的会得到更多的数,计算所有位置数之和最小。 解题思路: 相邻A与B,A在B左边,若A<B,则B位置加1;若A>B,则A位置加1。 class Solution { ​ public: int candy(ve 阅读全文
posted @ 2022-04-05 17:22 Whp_bicycle 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 回溯算法之组合总和问题 求解在一个数组中,找出所有满足数字和为目标数的组合 1.同一个数组,组合可存在重复数字,组合也能重复 class Solution { public: vector<vector<int>> result; vector<int> path; void backtrackin 阅读全文
posted @ 2022-04-05 17:21 Whp_bicycle 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 回溯算法 一、理论基础 1.回溯算法主要用于解决以下问题:组合、排列、切割、子集、排列、棋盘。 2.回溯算法分析模板如下: void backtracking(参数) { if (终止条件) { 存放结果; return; } ​ for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) 阅读全文
posted @ 2022-04-05 17:20 Whp_bicycle 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 二叉树 一、二叉树理论基础 1.满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。通俗话理解:从底层开始到顶部的所有节点都全部填满的二叉树。深度为k,则有2^k-1个节点 2.完全二叉树:除了最底层节点没有节满,其余每层节点都达到最大值,并且 阅读全文
posted @ 2022-04-05 17:17 Whp_bicycle 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 链表 一、理论基础 1.链表是一种由指针串联起来的线性结构,包括数据域和指针域,可分为单链表、双链表和循环链表 2.循环链表可以用来解决约瑟夫环问题,链表的头为head 3.存储方式:它是由指针域链接起来的,在内存中不是连续分布的 4.链表的定义: //单链表 struct listnode{ in 阅读全文
posted @ 2022-04-05 17:15 Whp_bicycle 阅读(46) 评论(0) 推荐(0) 编辑