剑指Offer
Ethan Wilson
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 06. 从尾到头打印链表 C++
先正序插入vector数组,再返回反转的数组 vector<int> reversePrint(ListNode* head) { ListNode* newhead = NULL, *p = head; vector<int> res; while (p) { res.push_back(p->val); p = p->next; } return vector<int>(res原创 2021-12-27 09:06:42 · 284 阅读 · 0 评论 -
剑指 Offer 30. 包含 min 函数的栈 C++ 时间91%
用一个记录当前最小值的栈mins作为辅助,如果新入栈的数小于等于(因为可能有重复数值,所以取等号)mins.top或者mins是空的,则两个栈一起入栈。 随后出栈时如果出的是当前最小值,则两个栈一起出栈。 class MinStack { public: stack<int> s, mins; public: /** initialize your data structure here. */ MinStack() { } void push(int x) { s.pu原创 2021-12-26 10:25:12 · 352 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列 C++ 时间99.87%
栈s1只进,栈s2只出。 入队时统一加入到s1,此时出栈顺序刚好跟出队顺序是反的。 出队时将s1的所有元素以此加入s2,此时s2的出栈顺序即为出队顺序,在s2里Pop即可。 需要注意的是,只需要在s2为空时再搬运s1即可 class CQueue { stack<int> s1, s2; public: CQueue() { } void appendTail(int value) { s1.push(value); } int deleteHead() { //原创 2021-12-26 09:44:58 · 339 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串 动态规划 c++
这题类似 70.爬楼梯,动态规划的思想 第 1 步:状态定义 dp[i] 表示长度为i时 有多少种翻译方法。 第 2 步:推导状态转移方程 dp[i]=dp[i−1]【+dp[i−2]】 (1)长度为i-1时若有n种方法,则如果将第i个数字单独加入,就相当于给这n个解法的末尾加一个翻译,总数n不变,所以一开始是dp[i]=dp[i−1] (2)但要注意,加dp[i−2]是有条件的,条件就是第i个数字和第i-1个数字构成的两位数不大于25,比如是‘23’(对应’x’),此时,相当于在dp[i-2]的n个方法后原创 2021-12-02 09:31:58 · 382 阅读 · 0 评论