剑指offer67题-No5.两个栈来实现一个队列
借助栈的先进后出规则模拟实现队列的先进先出 1、当插入时,直接插入 stack1 2、当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈到 stack2,再弹出 stack2 栈顶元素。 class Solution { public: void push(int n…
|
|
剑指offer67题-No4.重建二叉树
剑指offer第三题:从头到尾打印链表,比较简单。代码如下: #include <vector> class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { if(head == nullptr) return vector<int>…
|
|
剑指offer67题-No2.替换空格
双指针算法。 朴素思想是顺序查找,查找到了之后再进行移动替换。时间复杂度是O(n²)。 更优秀的O(n)解法是,先遍历一遍,找出空格的个数,进而可以得出替换后的字符串长度,用双指针P1,P2。 P1指向原字符串的最后一位字符,P2指向替换后字符串的最后一位(目前为空)。P1、P2开始从后往前,边移动边复制,直到P1遇到了空格,P2添加%20之后,继…
|
|
剑指offer67题-No1.二维数组的查找
牛客链接:二维数组的查找 暴力方法是遍历两边,复杂度是O(mn)。核心是二分查找。二分法:O(nlogm)。 bool Find(int target, vector<vector<int> >& array) { // write code here for(auto &row : array){ int l = 0;…
|
|