![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
东华大学考研复试oj
东华大学考研复试oj题
Jelly_Believer
这个作者很懒,什么都没留下…
展开
-
C++中陌生的函数
exicographical_compare()exicographical_compare()算法可以比较由开始和结束迭代器定义的两个序列。它的前两个参数定义了第一个序列,第 3 和第 4 个参数分别是第二个序列的开始和结束迭代器。默认用 <运算符来比较元素,但在需要时,也可以提供一个实现小于比较的函数对象作为可选的第 5 个参数。如果第一个序列的字典序小于第二个,这个算法会返回true,否则返回 false。所以,返回 false 表明第一个序列大于或等于第二个序列。...原创 2021-07-12 15:38:50 · 87 阅读 · 0 评论 -
leetcode 去除重复字母 + 无重叠区间(贪心)
题目要求:要去重(应用freq[256] = {false}数组来去重)2.去除字符串中的字符顺序不能打乱s中字符出现的相对顺序(通过栈来保存字符相对顺序,从而保存结果串,先进后出的特点使我们可以立即操作插入的字符)3.在所有符合上一条的去重字符串中,字典序最小的作为最终结果(类似单调栈的思路,配合计数器Count不断pop掉不符合的字符,保证最后得到的结果字典序最小)class Solution {public: string removeDuplicateLetters(st..原创 2021-07-09 17:29:29 · 142 阅读 · 0 评论 -
LeetCode 买卖股票的最佳时机 + 买卖股票的最佳时机II + 救生艇(贪心)
贪心:由局部最优达到全局最优(股票只能买卖一次,问最大利润)贪心策略:取左最小值和右最大值, 则得到的差值就是最大利润int maxProfit(vector<int>& prices){ int low = INT_MAX; int res = 0; for(int i = 0; i < prices.size(); i++){ low = min(low, prices[i]); res = max(res, prices[i] - low); }原创 2021-07-09 16:28:40 · 68 阅读 · 0 评论 -
LeetCode 和至少为 K 的最短子数组(双端队列) vs 长度最小的子数组(滑动窗口)vs 和为K的子数组(前缀和+哈希表)
和至少为 K 的最短子数组里面的元素可以为负数,故不可以用滑动窗口涉及知识:前缀和数组:sum[i] = array[0] + array[1] + ... + array[i-1]若要求区间[3, 5]的和,则可用sum[6] - sum[3](注意,为了计算方便,加了sum[0] = 0,即前缀和数组长度为数组长度+1)单调双端队列:考虑当前位置i,这时[0, i]的值比区间[0, i-1]还要小,则对于后面的位置,就不需要考虑以i-1为起始的区间了,因为sum[n] - sum[i]原创 2021-07-07 17:23:46 · 94 阅读 · 0 评论 -
Leetcode 队列相关问题(优先队列,如大根堆和小根堆,单调队列)
topk问题就要想到优先队列前 K 个高频元素class Solution_5 {public: //o(nlogk) vector<int> topKFrequent(vector<int>& nums, int k) { vector<int> res; map<int, int> mp; for(int i = 0; i < nums.size(); i++){ .原创 2021-07-07 16:49:43 · 93 阅读 · 0 评论 -
c++优先队列(priority_queue)
包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的和队列基本操作相同:top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插入队列pop 弹出队头元素定义:priority_queue<Ty.原创 2021-07-07 10:03:37 · 125 阅读 · 0 评论 -
东华oj删除链表的倒数第N个节点 + 16进制链表转10进制
删除链表的倒数第N个节点一次遍历,故采用双指针我们可以假设设定了双指针p和q的话,但q指向末尾的NULL,p与q之间相隔元素个数为n时,那么删除掉p的下一个指针就完成了要求。设置虚拟节点dummyhead指向head设定双指针p和q,初始都指向虚拟节点dummyhead移动q,直到p和q之间相隔的元素个数为n(即q先后移动n+1次)然后同时移动p与q,直到q指向NULL将p的下一个节点指向下下个节点// An highlighted blockListNode* removeNthFr原创 2021-07-01 10:01:19 · 179 阅读 · 0 评论