算法
FW Pro Plus
这个作者很懒,什么都没留下…
展开
-
实现功能栈并获取栈中最小元素
有三种操作种类,op1表示push,op2表示pop,op3表示getMin。你需要返回和op3出现次数一样多的数组,表示每次getMin的答案1<=操作总数<=1000000-1000000<=每个操作数<=1000000数据保证没有不合法的操作代码:class Solution { private: stack<int>st,min_st;//一个辅助栈用于实现栈操作,min_st则用于保存最小元素public: /**原创 2021-05-20 17:08:41 · 116 阅读 · 0 评论 -
对于一个旋转过地有序数组 返回目标值地下标
class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { // write原创 2021-05-18 20:05:12 · 117 阅读 · 0 评论 -
三数之和
class Solution {public: vector<vector<int> > threeSum(vector<int> &num) { vector<vector<int>>VEC; sort(num.begin(),num.end()); if(num.size() < 3 || num[0] > 0||num[num.s原创 2021-05-16 21:50:40 · 107 阅读 · 0 评论 -
两个链表相加
类似于大数加法,两个链表相加得到一个新的链表算法思想:首先想到的是肯定得从末尾进行相加,那就让两个链表的val值全部入栈,分别存在两个栈中,再依次弹栈相加,就是从末尾相加,需要注意的是可以定义一个进位bit,如果两个链表对应的val值相加大于等于十就将其置为1否则置为0;还有一个需要注意的地方是,由于我们是从末尾进行相加,所以每次拿到的都是新链表从后向前的结点,结点的连接需要注意,在最后两个链表相加完成后都会有一个bit值 需要对其进行判断是否为1,为1则需要再加一次,否则就不需要加额外的一次;具体代码原创 2021-05-16 17:37:34 · 359 阅读 · 0 评论 -
将一个字符串分割为回文子串 返回所有可能的分割方式
将一个字符串分割为回文子串 返回所有可能的分割方式算法思想:采用回溯递归的方法两个函数:1.判断子串是否为回文 2.分割字符串,每一次放入一种分割方式到一个二维数组中具体实现:记录一个startindex,写一个for循环,如果是回文串,就进入i+1位置,继续递归;直至startindex大于等于字符串的长度;返回一种分割方式,同时需要注意么在所有递归完成之后需要通过pop_back()删除vec中的数据,而不能同clear()清空,因为其中有可能不是回文就会跳过进行下一次的循环中,cl原创 2021-05-12 22:45:06 · 626 阅读 · 0 评论 -
LRU算法
LRU算法: 最近久未使用,在内存有限的情况下需要淘汰久未使用的数据常用于页面置换算法,找到久未使用的页面进行淘汰,空出内存给新数据加入算法思想:利用list和unordere_map实现双向链表用于存储KEY和VALUE值哈希表则存储KEY和KEY在list中的位置定义一个Node类型<K,Y>存储数据,再重命名一个指向list类型的迭代器itertypedef typename std::list::iterator iter;作为哈希表的value值 同时cap_作为LRUca原创 2021-05-11 21:33:47 · 76 阅读 · 0 评论