- 博客(15)
- 收藏
- 关注
原创 实现功能栈并获取栈中最小元素
有三种操作种类,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
163
原创 对于一个旋转过地有序数组 返回目标值地下标
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
172
原创 三数之和
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
157
原创 两个链表相加
类似于大数加法,两个链表相加得到一个新的链表算法思想:首先想到的是肯定得从末尾进行相加,那就让两个链表的val值全部入栈,分别存在两个栈中,再依次弹栈相加,就是从末尾相加,需要注意的是可以定义一个进位bit,如果两个链表对应的val值相加大于等于十就将其置为1否则置为0;还有一个需要注意的地方是,由于我们是从末尾进行相加,所以每次拿到的都是新链表从后向前的结点,结点的连接需要注意,在最后两个链表相加完成后都会有一个bit值 需要对其进行判断是否为1,为1则需要再加一次,否则就不需要加额外的一次;具体代码
2021-05-16 17:37:34
430
原创 将一个字符串分割为回文子串 返回所有可能的分割方式
将一个字符串分割为回文子串 返回所有可能的分割方式算法思想:采用回溯递归的方法两个函数:1.判断子串是否为回文 2.分割字符串,每一次放入一种分割方式到一个二维数组中具体实现:记录一个startindex,写一个for循环,如果是回文串,就进入i+1位置,继续递归;直至startindex大于等于字符串的长度;返回一种分割方式,同时需要注意么在所有递归完成之后需要通过pop_back()删除vec中的数据,而不能同clear()清空,因为其中有可能不是回文就会跳过进行下一次的循环中,cl
2021-05-12 22:45:06
751
原创 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
129
原创 二叉树的前中后非递归遍历
二叉树的前中后非递归遍历算法思想:前序:定义一个栈,以根右左顺序入栈,再依次出栈中序:先遍历左子树,再依次取栈顶元素进行回退,直到右子树不空,继续依次入栈后序:定义两个栈,先将根结点入第二个栈中,再将左右结点按左右顺序入进第一个栈 ,再将其出栈进入第二个栈,第二个栈就是(从栈顶到栈底)右左根的次序,再将第二个栈依次弹栈就是后续遍历代码 vector<vector<int> > threeOrders(TreeNode* root) { // write c
2021-05-07 23:02:41
166
原创 螺旋矩阵
螺旋矩阵给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。示例1输入[[1,2,3],[4,5,6],[7,8,9]]返回值[1,2,3,6,9,8,7,4,5]算法思想:由于传入一个二维数组,可以定义四个边界,依次循环走,注意处理边界条件代码:class Solution {public: vector<int> spiralOrder(vector<vector<int> > &matrix)
2021-05-07 22:27:26
197
原创 二叉树的层序遍历以及Z型遍历
二叉树的层序遍历:给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]算法思想:使用队列,每层入队列一边入一边出;代码: vector<vector<int> > levelOrder(TreeNode* root) { // write code here vector<int>
2021-05-07 18:39:58
355
原创 大数之和
大数之和题目描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)算法思想:要求以字符串形式返回,直接相当于写一个加法的运算。直接从末位开始相加,定义一个bit进位,两数相加之和大于十,将bit置为1,否则置为零。代码:string solve(string s, string t) { // write code here string str;
2021-05-07 17:43:34
461
原创 C++继承
继承是面向对象程序设计中使代码可以复用的重要手段,可以允许在保持原有类特性的基础上对其进行扩展,从而产生新的类称作派生类。多态是在不同的继承关系的类对象去调用同一函数而产生了不同的行为通过定义和重写虚函数,通过基类的指针或引用指向派生类对象,通过基类的指针或引用调用虚函数实现多态。(调用相同接口,表现不同结果)虚函数被virtual修饰的类成员函数(就是允许派生类对其进行重写)虚函数的重写:在派生类中的一个与基类虚函数完全相同的虚函数,即返回类型、函数名与参数列表完全相同。虚析构 即在析构函
2021-03-09 17:12:42
109
原创 求单链表的倒数第k个结点 差值思想
求一个单链表的倒数第k个结点思路:1.首先要求倒数第k个结点,可以想到这个结点就是从单链表的NULL位置往前走k个结点2.显然一个指针是无法实现的,所以需要定义两个指针,当其中一个指针走到链表的NULL位置时,只需要让另一个指针与这个指针相差k个结点的位置即可达成目的。3.一开始的指针都定义在头结点的位置,让其中一个指针先走k次,然后两个指针开始同步走,直到先走的那个指针到达NULL位置时停止,而此时后出发k次的指针所指向的结点便是我们需要得到的倒数第k个结点的位置。具体实现找到单链表中倒数第k个
2020-11-28 20:43:07
1148
2
原创 单链表是否成环并且返回入环后的第一个结点
判断一个单链表是否有环并且返回第一个入环结点1.首先判断这个单链表是否有环,可以利用快慢指针来进行判断定义快慢指针同步往后走,一旦快指针和慢指针相遇,则可以说明这个单链表是有环的否则快指针会指向NULL,则说明单链表没有成环2.要求返回入环的第一个结点可以通过画图理解如下:假设快慢指针在环上某一结点相遇(快指针有可能已经在环上走了多圈,设为n;)便可以得到快指针走过的路程为 :x + y + n(y+z)而慢指针所走过的路程为 :x + y;由于刚开始设定慢指针走一个结点的情况下,快指针走
2020-11-28 19:47:37
290
原创 Swap函数交换两个整数的值以及易错总结
1.Swap函数交换两个整数的值的错误做法1:只交换了两个数的形参void Swap_error1(int a,int b){ int tmp = a; a = b; b = tmp;}这种交换方式只交换了Swap函数里边儿a,b的值,而主函数中的a和b并没有发生改变 ,这种情况属于交换失败2.Swap函数交换两个整数的值的错误做法2:只交换了形参的指向void Swap_error2(int *p1,int *p2){ int *tmp = p1; p1 = p2; p2 =
2020-10-14 22:38:28
2785
1
原创 五位数的输出问题
五位数的输出问题给出一个不多于五位数的整数,要求:①整数的位数②正序输出每一个数字③逆序输出每一个数字①整数的位数:先写出当这个整数为零的时候的位数0;当这个数不为零的时候用这个数去除以10,并用计数器i++除了多少次后这个数变为零最后再返回计数器i的值就是这个数的位数int Count(int n)//求位数{ int i = 0; if(n==0) return 1; if(n!=0) { n/=10; i++; } return i;}②正序输出每一个数字:先通过第
2020-10-12 18:07:02
1670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人