刷题
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 · 69 阅读 · 0 评论 -
刷题 | 单调栈
while当前元素i比栈顶大时,pop,对于栈顶元素来说,右边界是i,左边界是新栈顶下标。while当前元素比栈顶小,pop,直到找到栈顶比它小的,即答案,然后把该元素压入栈。对数组中每一个元素寻找左边/右边第一个比他小/大的元素。注意点是最后一个元素要继续while判断。从右至左每一个元素:重复左小。新栈顶不存在时左边界就是0。原创 2022-09-06 14:01:31 · 66 阅读 · 0 评论 -
刷题 | 非递归二叉树遍历
代码】刷题 | 非递归二叉树遍历。原创 2022-08-12 20:26:22 · 267 阅读 · 0 评论 -
刷题 | top k问题
待续。1 排序2 快排3 堆4。。。。待续原创 2022-03-09 20:51:16 · 1956 阅读 · 0 评论 -
刷题 | 贪心(田忌赛马的变种)
题目:你有n个马,你对手有m个马,每次只能派一匹马对战,用过了不能重复使用。每个马有两个数据,攻击力和防御力。如果你的马能打败对方的所有马(就是每次对战,你的马的攻击力大于等于对方马的防御力),则输出最多有多少次【你的马的防御力也大于对方马的攻击力】。如果你的马不能打败对方所有的马,就输出-1。我的思路1 将自己马按攻击从小到大排,对方马按防御从小到大排,用map储存,key存放排序量2 针对我方每一个马,查询能打败的对方的马的集合,0~k13 遍历集合,查询到防御力大于对方攻击力的原创 2022-03-09 20:44:59 · 73 阅读 · 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 · 52 阅读 · 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 · 82 阅读 · 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 · 65 阅读 · 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 · 327 阅读 · 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 · 121 阅读 · 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 · 384 阅读 · 0 评论 -
刷题 | 红黑树
待续原创 2022-01-09 18:03:05 · 270 阅读 · 0 评论 -
刷题 | 优先队列
priority_queuepriority_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 · 61 阅读 · 0 评论 -
刷题 | 关于链表
1. 找环的开始:两个指针一个走两步一个走一步原创 2021-12-30 20:39:39 · 264 阅读 · 0 评论 -
c++ | 关于STL
map: mp1, mp2, 可以mp2 = mp1;string: s.substr(pos, len);原创 2021-12-29 21:06:57 · 130 阅读 · 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 · 479 阅读 · 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 · 415 阅读 · 0 评论 -
刷题 | 子序列只含正数 | 滑动窗口
1. 对一个满足要求的窗口,在循环里先去判断能否进一步缩小,再往后移(第一反应都是先往后移再缩小)2. 打草稿!分析当前窗口和下一步窗口分别要干嘛 不要乱不要乱原创 2021-12-28 19:15:16 · 107 阅读 · 0 评论 -
刷题 | 位运算
int 类型的变量才可以参加与运算26个字母可以用26位的二进制int来表示 1 << alp - 'a' ; (直接是二进制存储)原创 2021-12-27 18:55:04 · 181 阅读 · 0 评论 -
刷题 | tips | 持续更新
1. a/2: a>>2; a/(-2): -(a>>2)原创 2021-12-26 20:56:18 · 218 阅读 · 0 评论