摘要:
和225类似,queue和stack的性质正好相反,因此在push时要进行处理。 维护两个stack:stk和tmp,stk存放与queue相反的顺序,比如queue为:1、4、5,stk为:5、4、1,这样stk.top()会一直等于queue.front()。 每次push进一个数x时,先把st 阅读全文
摘要:
用queue模拟stack,因为queue只能取front的值,和stack正好相反,因此核心思想是queue保持着与stack相反的顺序,一直逆序,所以每次push进一个新值后,要依次把新值之前的值排到队尾。比如原来q为4、5,push进1,q依次为:4、5、1;5、1、4;1、4、5. 对应的s 阅读全文
摘要:
难点在于如果在调用getMin()时只花常数时间。 维护两个vector,v存push进来的数,minHist存最小的数,这个最小的数是指v中从头到对应位置里最小的数,比如minHist中位置为i的数,这个数是v中从0到i(均包含)的所有数中最小的数,举个例子,依次push进4、5、1,那么minH 阅读全文
摘要:
最后输出结果中字母的顺序应该保留输入字符串中的顺序,而且字典序最小,比如输入"cbacdcbc",输出"acdb",这四个字母的先后顺序遵循输入中的顺序,同时字典序最小。 下面这份代码的大致思路是首先把s中每个字母出现次数统计一次,然后再遍历一次,minLetterIndex保存目前为止出现的字母中 阅读全文
摘要:
Unix-style的path中,"."表示当前目录下的子目录,".."表示返回上一级目录,"..."的话保留(Input:"/..." Expected answer:"/...")。 因此维护一个stack,存放路径中文件夹的名字name,将path打散(split)后,一段段读入,如果是"." 阅读全文
摘要:
int转string string转int 阅读全文
摘要:
最简单的思路,如果lists.size()<=1,可直接处理;否则每次取lists最开始的两个节点,进行merge,然后push_back,同时删去最开始的两个节点,一直循环知道lists只剩下一个节点。 地狱般的460ms,更好更快算法待看,留坑。 阅读全文
摘要:
141的进阶版,不仅要判断是否存在cycle,还有找出cycle的起始节点。 首先如141所做,根据fast==slow判断是否存在cycle。 如果fast==slow,则slow重置为head,此时fast和slow都每次走一步,当两者相遇时,相遇点即为圆环开头。现在证明为什么slow重置为he 阅读全文
摘要:
判断一个链表是否存在循环(不是val的循环),即想象一个圆环,圆环可能还外连一根线,现在要判断链表是否含有这个环。 设置快慢两个节点,slow一次一步,fast一次两步,如果存在一个环,那么slow和fast必定会进入这个环,现在证明一旦进入环slow和fast必定会在循环中相遇。 设slow在环中 阅读全文