刷题
tuuzkiii_Tuu
这个作者很懒,什么都没留下…
展开
-
刷题 | dp
例:s为12457,可以切分为124|5|7,第一段和第三段的和能被7整除,输出2。输出:输出一个整数,表示切开后最多能有多少段的数字和是7的倍数。dp[i]:表示到i位置为止,最多有多少段的数字和是7的倍数。dp[i]需要比较的点:要包含i的段,or不要包含i的段。字符串切开后每段的数字和都尽可能被7整除。输入:一个字符串s,s的每位都是数字。原创 2022-09-15 14:53:37 · 95 阅读 · 0 评论 -
刷题 | 单调栈
while当前元素i比栈顶大时,pop,对于栈顶元素来说,右边界是i,左边界是新栈顶下标。while当前元素比栈顶小,pop,直到找到栈顶比它小的,即答案,然后把该元素压入栈。对数组中每一个元素寻找左边/右边第一个比他小/大的元素。注意点是最后一个元素要继续while判断。从右至左每一个元素:重复左小。新栈顶不存在时左边界就是0。原创 2022-09-06 14:01:31 · 90 阅读 · 0 评论 -
刷题 | 非递归二叉树遍历
代码】刷题 | 非递归二叉树遍历。原创 2022-08-12 20:26:22 · 289 阅读 · 0 评论 -
刷题 | top k问题
待续。 1 排序 2 快排 3 堆 4。。。。待续原创 2022-03-09 20:51:16 · 2001 阅读 · 0 评论 -
刷题 | 贪心(田忌赛马的变种)
题目:你有n个马,你对手有m个马,每次只能派一匹马对战,用过了不能重复使用。每个马有两个数据,攻击力和防御力。 如果你的马能打败对方的所有马(就是每次对战,你的马的攻击力大于等于对方马的防御力),则输出最多有多少次【你的马的防御力也大于对方马的攻击力】。 如果你的马不能打败对方所有的马,就输出-1。 我的思路 1 将自己马按攻击从小到大排,对方马按防御从小到大排,用map储存,key存放排序量 2 针对我方每一个马,查询能打败的对方的马的集合,0~k1 3 遍历集合,查询到防御力大于对方攻击力的原创 2022-03-09 20:44:59 · 98 阅读 · 0 评论 -
刷题 | 并查集
前置: int father[n]; for(int i=0; i<n; i++) { father[i] = i; } 查: int findfather(int a){ int tmp1, tmp2; tmp1 = a; // 找到根 while(father[a] != a) { a = father[a]; } // 将路径上的节点的father全部改为根 while(father[tmp1] != t原创 2022-03-09 16:15:43 · 87 阅读 · 0 评论 -
刷题 | 背包问题
01背包 n件物品,每件物品有自己的重量和价值,放入容量为V的背包,怎么放使价值最大 dp[i][v]: 代表前i件物品刚好放入容量为v的空间时的最大价值 dp[i][v] = max{dp[i-1][v], dp[i-1][v-w[i]] + c[i]} // 不放i or 放i 由一个两层循环求出dp 完全背包 和01的区别在于黄色部分 n种物品,每种物品有自己的重量和价值,有无限个,放入容量为V的背包,怎么放使价值最大 dp[i][v]: 代表前i件物品刚好放入容量为v的空间时的最大..原创 2022-03-09 13:46:37 · 98 阅读 · 0 评论 -
刷题 | 快排
Paritition1(int arr[], int l, int r) { int pivot = arr[l]; while (l < r) { while (l < r && arr[r] >= pivot) { --r; } arr[l] = arr[r]; while (l < r && arr[l] <= pivot) { ++l; } .原创 2022-02-28 14:06:55 · 101 阅读 · 0 评论 -
刷题 | 设计模式
工厂模式:一个抽象类+多个具体的实现类+一个工厂类 // 抽象类 class Shape { public: virtual void GetShape() = 0; }; // 具体实现类 class Circle :public Shape { public: void GetShape() { cout << "A circle" << endl; } }; class Square :public Shap原创 2022-02-20 20:30:20 · 358 阅读 · 0 评论 -
刷题 | 二分
while (l <= r) { mid = (l + r) / 2; if (nums[mid] < target) { l = mid + 1; } else if (nums[mid] > target) { r = mid - 1; } else { return mid; ...原创 2022-01-12 21:09:56 · 168 阅读 · 0 评论 -
刷题 | 前缀树
这种树是用边来存储信息(字母),节点仅表示第i个位置。因此每个节点最多延伸出26条边(加假如只有小写的话) 节点可以定义为: struct trie_node{ bool end; // 是否是单词的结尾 int pos; // 当前node存放在node[]数组中的位置 int arr[26]; // 当前node下存在哪些边 map<int, int>原创 2022-01-10 20:57:19 · 404 阅读 · 0 评论 -
刷题 | 红黑树
待续原创 2022-01-09 18:03:05 · 302 阅读 · 0 评论 -
刷题 | 优先队列
priority_queue priority_queue<int> a; // 和b一样 priority_queue<int, vector<int>, less<int> > b; // 大顶堆 priority_queue<int, vector<int>, greater<int> > c; // 小顶堆 使用: 例如b,每次pop() 都会把最大的元素pop出来——也就是说,如果队列的大小是n,就是把原创 2022-01-09 18:02:30 · 81 阅读 · 0 评论 -
刷题 | 关于链表
1. 找环的开始:两个指针一个走两步一个走一步原创 2021-12-30 20:39:39 · 298 阅读 · 0 评论 -
c++ | 关于STL
map: mp1, mp2, 可以mp2 = mp1; string: s.substr(pos, len);原创 2021-12-29 21:06:57 · 147 阅读 · 0 评论 -
刷题 | 关于理解题意(看不懂>_<)
这个题: https://leetcode-cn.com/problems/range-sum-query-2d-immutable/ 然后给的模板是: 第一反应就是懵嘛,解题思路很简单:1.处理给定的matrix 2.每次输入两个角就计算输出;但是!构造函数虽然是引用传递,可以直接处理matrix,但sumRegion函数得用到这个matrix啊,现在这个NumMatrix类里面并没有matrix,那....? 思路:(先看给的注释说明) 1.主函数会创建一个对象,创建对象.原创 2021-12-29 19:12:22 · 498 阅读 · 0 评论 -
刷题 | 子序列含负数 | 前缀和
原数组【。。。。】 sum数组【。。。。】(每一个值是从0到此处的和) sum_target【。。。。】(sum数组每个数-目标) 一个map :int->struct【vector[pos1, pos2, pos3........] 按情况来点别的】 过程: 第一次遍历原数组: 得到sum数组,将sum数组出现过的值都放入map,将位置i按压进vec的pos就行 sum数组不要了,直接减target得到sum_target 第二次遍历sum_target: 每一个值去找原创 2021-12-28 21:19:46 · 449 阅读 · 0 评论 -
刷题 | 子序列只含正数 | 滑动窗口
1. 对一个满足要求的窗口,在循环里先去判断能否进一步缩小,再往后移 (第一反应都是先往后移再缩小) 2. 打草稿!分析当前窗口和下一步窗口分别要干嘛 不要乱不要乱原创 2021-12-28 19:15:16 · 124 阅读 · 0 评论 -
刷题 | 位运算
int 类型的变量才可以参加与运算 26个字母可以用26位的二进制int来表示 1 << alp - 'a' ; (直接是二进制存储)原创 2021-12-27 18:55:04 · 203 阅读 · 0 评论 -
刷题 | tips | 持续更新
1. a/2: a>>2; a/(-2): -(a>>2)原创 2021-12-26 20:56:18 · 236 阅读 · 0 评论