![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
nwpubear
独善其身
展开
-
O(1)时间getMin()的特殊栈
O(1)时间getMin()的特殊栈 为了能够满足时间复杂度,必然是需要空间的付出,所以可以考虑利用两个栈来实现这个特殊的栈 一个数据栈保存所有数据,一个最小数栈保存对应状态下的最小值。代码如下 `` class Solution { public: void push(int value) { if(stackMin.emp...原创 2018-07-25 22:41:52 · 184 阅读 · 0 评论 -
如何计算1+2+3+...+n的值
利用函数数组 不能使用递归,但是可以使用两个函数的数组,随着n到0选择基准函数,其他时候选择调用下降函数//使用一个函数指针数组,装下递归基函数和递归下降函数//关键在于如何选择函数,在0时候选择基准,非0时候选择下降typedef int (*fun) ( int); //定义函数指针类型class Solution {public: static int S...原创 2018-08-07 19:36:06 · 3063 阅读 · 0 评论 -
不用加减乘除做加法
不用加减乘除做加法 不用加减乘除做加法其实就需要利用位运算来进行,有两点需要注意1. sum=num1^num2;2. carry=(num1&num2)<<1;class Solution {public: int Add(int num1, int num2) { while(num2!=0){ ...原创 2018-08-07 17:58:30 · 100 阅读 · 0 评论 -
完成字符串到整数的转换
字符串到整数的转换 可以考虑对于原有的atoi的实现,不仅仅需要计算得到数值,对于其中的特殊情况需要进行仔细斟酌,区分,提高程序的鲁棒性。首先字符串首字符可以是正负首字符是正负的时候,后续必须得有非空的数字字符串,否则返回0,其余遇到非数字字符的情况都是判错,返回0。对于”0”返回0,为了区分两种0,需要添加一个全局或者传入的区分变量,本文不讨论该种情况,但是需要知道。空字...原创 2018-08-07 17:32:11 · 188 阅读 · 0 评论 -
最低公共祖先
最低公共祖先方法一:递归实现 对于树中两个节点而言,最低公共祖先LCA其实就是该节点左边和右边分别包含A,B两个节点。只有A,B分别在其左右子树中。首先判断该节点是否非空,空返回NULL,表示既没有A,有没有B如果该节点本身是A,或者B中的一个则返回该节点递归的判断该节点的左右子树,如果左右子树都不是返回NULL,说明左右子树分别包含A,B那么就可以返回root。(注意,这...原创 2018-08-06 22:42:53 · 490 阅读 · 0 评论 -
用一个栈实现另一个栈的排序
用一个栈实现另一个栈的排序 思路:为了实现一个栈的从大到小的排序(栈顶到栈底),需要考虑一个事实,如果我们每次都往辅助栈中存放当前剩余的最大的值,最后直到当前栈空了,再把辅助栈转移回去就可以完成排序。 关键:如何每次把当前的最大的值存入辅助栈。只要弹出一个数,如果辅助栈为空,push,如果弹出值大于辅助栈顶,则弹出辅助栈直到遇到小于或等于的push。如果小于等于就push。...原创 2018-08-01 16:53:39 · 566 阅读 · 0 评论 -
五中基础排序算法实现细节
由于时间仓促,本文先展示实现代码,后续抽空进行思路的补充。class Solution {public: /** * @param A: an integer array * @return: nothing */ void sortIntegers(vector&lt;int&gt; &amp;A) { // wri...原创 2018-08-09 20:31:21 · 257 阅读 · 0 评论 -
递归实现栈的翻转
递归实现栈的翻转 主要考察对于递归的理解,其实这个问题最简单的方法当然是设计一个空的栈来存储这些元素,一次达成逆序,但是题目要求使用递归的方式实现逆序,因此需要借助函数返回栈来充当这个这个栈的作用,实际上依然是借助了一个栈,但是这个栈是函数帧上的栈。思路如下取出一个栈的最底下的那个元素,存放在函数帧中,也就是递归中的每层返回值每次取出一个以后,逆序当前的剩余栈,然后push刚才的那个值...原创 2018-07-30 23:23:29 · 697 阅读 · 0 评论 -
两个栈形成一个队列
两个栈形成一个队列 1.栈先进后出,两个栈就可以先进先出 2. 从一个栈进,然后转移到另一个栈中,然后再出。代码如下。class MyQueue {public: MyQueue() { // do intialization if necessary } /* * @param element: An integer...原创 2018-07-26 22:03:35 · 219 阅读 · 0 评论 -
连续子序列的和为s的数字及其扩展
连续子序列和为s的数字 为了能够得到线性时间复杂度的算法,可以考虑两个标记,一个指向头部,一个指向尾部 1. 和大了就++head 2. 和小了就–tailclass Solution { //和为sum的两个数字,因为这是个有序的序列,自然需要利用public: vector<int> FindNumbersWithSum(vector<...原创 2018-08-16 20:55:25 · 677 阅读 · 0 评论