算法
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 · 123 阅读 · 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 · 137 阅读 · 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 · 117 阅读 · 0 评论 -
两个链表相加
类似于大数加法,两个链表相加得到一个新的链表 算法思想:首先想到的是肯定得从末尾进行相加,那就让两个链表的val值全部入栈,分别存在两个栈中,再依次弹栈相加,就是从末尾相加,需要注意的是可以定义一个进位bit,如果两个链表对应的val值相加大于等于十就将其置为1否则置为0;还有一个需要注意的地方是,由于我们是从末尾进行相加,所以每次拿到的都是新链表从后向前的结点,结点的连接需要注意,在最后两个链表相加完成后都会有一个bit值 需要对其进行判断是否为1,为1则需要再加一次,否则就不需要加额外的一次; 具体代码原创 2021-05-16 17:37:34 · 379 阅读 · 0 评论 -
将一个字符串分割为回文子串 返回所有可能的分割方式
将一个字符串分割为回文子串 返回所有可能的分割方式 算法思想:采用回溯递归的方法 两个函数:1.判断子串是否为回文 2.分割字符串,每一次放入一种分割方式到一个二维数组中 具体实现:记录一个startindex,写一个for循环,如果是回文串,就进入i+1位置,继续递归; 直至startindex大于等于字符串的长度;返回一种分割方式,同时需要注意么在所有递归完成之后需要通过pop_back()删除vec中的数据,而不能同clear()清空,因为其中有可能不是回文就会跳过进行下一次的循环中,cl原创 2021-05-12 22:45:06 · 662 阅读 · 0 评论 -
LRU算法
LRU算法: 最近久未使用,在内存有限的情况下需要淘汰久未使用的数据 常用于页面置换算法,找到久未使用的页面进行淘汰,空出内存给新数据加入 算法思想:利用list和unordere_map实现 双向链表用于存储KEY和VALUE值 哈希表则存储KEY和KEY在list中的位置 定义一个Node类型<K,Y>存储数据,再重命名一个指向list类型的迭代器iter typedef typename std::list::iterator iter;作为哈希表的value值 同时cap_作为LRUca原创 2021-05-11 21:33:47 · 89 阅读 · 0 评论