剑指offer
带你去网吧里偷耳机
这个作者很懒,什么都没留下…
展开
-
剑指offer----数字在排序数组中出现的次数
这个题目要求比遍历更低的时间复杂度,那么需要2个二分查找,第一个二分查找为查找数组中第一个为K的位置,第二个二分查找为查找数组中最后一个为K的位置。2个位置之差即为次数比较巧妙的解法:class Solution {public: int bisearch(vector<int>& data, float k){ //二分查找 int left = 0; int right = data.size() - 1; w...原创 2021-10-03 22:36:38 · 69 阅读 · 0 评论 -
剑指offer---复杂链表的复制
复杂链表的复制_牛客题霸_牛客网解法一:哈希class Solution {public: RandomListNode* Clone(RandomListNode* pHead) { if(!pHead) return NULL; std::unordered_map<RandomListNode*,RandomListNode*> m; for(auto p = pHead;p!=NULL;p=p.原创 2021-10-03 10:36:01 · 86 阅读 · 0 评论 -
剑指offer---打印1到最大的N位数
法一:大数运算,字符串注意点:1最后的打印要判断非数值位,非数值位不输出2在加一的过程中要避免溢出,譬如只求三位数,但是999+1为1000,这个时候就溢出了,我们要结束循环#include <iostream>#include <cstring>using namespace std;bool IncreaseNumber(char* number,int len){ int nSum = number[len-1] - '0'; ...原创 2021-10-02 10:35:40 · 115 阅读 · 0 评论 -
《剑指offer》思路总结
1 如何用2个栈模拟出队列。这里需要一个实际栈A和一个中转栈B。进队时:如果B中有数据,全pop出然后push进去栈A,再把要进栈的数据push进去栈A。出队时:如果A中有数据,全部pop出然后push进栈B,再把B中的栈头pop出去即可2 如何用2 个队列来模拟出栈队列A和队列B进栈:看哪个队列非空,就把元素入队。出栈:把前n-1个元素依次出队再进队入另一个队列,把第n个元素出队列即可。3 海量数据处理之位图法:简单来说就是用二进制中的每一位bit来代替一个数字,key原创 2021-09-05 18:28:41 · 183 阅读 · 0 评论 -
剑指offer-序列化二叉树与反序列化二叉树
实现两个函数,分别用于序列化和反序列化二叉树。序列化二叉树,给定一棵二叉树,以某种方式遍历它,空孩子节点用'#'表示,数字之间用逗号分割开来。比如序列化的结果是:1,2,4,###3,5,##6,##序列化过程,可以考虑二叉树的前序遍历方法进行序列化。 //将int型数据转换为str string to_string(int val) { ...原创 2019-04-17 10:10:35 · 130 阅读 · 0 评论 -
剑指offer-求a^n
法一 递归法需要考虑base为0的情况,以及exponent为负数的情况。a^n=a*a^(n/2)*a^(n/2) 当n为奇数时a^n=a^(n/2)*a^(n/2) 当n为偶数时class Solution {public: double Power(double base, int exponent) { if(base==...原创 2019-04-25 22:05:15 · 121 阅读 · 0 评论 -
剑指offer-剪绳子问题
给你一根长度为n的绳子,把绳子剪成若干段(每段长为整数),使得这些绳子的长度之积最大,求可能的最大乘积是多少?法一 动态规划时间复杂度:O(n^2),空间复杂度O(n)(1)当绳子长度小于2,无法剪。(2)当绳子长度为2,剪为1*1,结果是1(3)当绳子长度为3,剪为2*1,结果为2(4)当绳子长度大于等于4时,使用动态规划,用a[i]来表示把长度为i的绳子剪开之后乘积的最...原创 2019-04-15 18:46:37 · 221 阅读 · 0 评论 -
剑指offer:替换空格
题目:实现一个函数,把字符串中的每个空格替换为"%20"。例如。输入“we are happy.”,输出"we%20are%20happy."。最直接的思路是把每个空格替换之前,都把空格之后的所有字符整体向后移动2个位置,在空格处填充%20即可。但每次都要重新往后整体移动,算法复杂度太高。可以先遍历得到空格的个数,然后在字符串的末尾补上相应的空格数。然后用2个指针p1,p2分别记录原来字符...原创 2019-04-07 18:51:20 · 114 阅读 · 0 评论 -
剑指offer43---1-n整数中1出现的次数
1-n整数中1出现的次数这个题目暴力解决貌似可以通过,但时间复杂度太大了。法一 剑指offer版比如数字21345,可以把他分为2段,1-1345 1346-21345先看1346-21345,因为最高位是2,大于1,因此,只看最高位的话,1出现的次数就是10000-19999,即10000次看低位,我们发现包括1346-9999 0000-9999 0000-134...原创 2019-03-04 21:02:58 · 338 阅读 · 0 评论 -
剑指offer36: 二叉搜索树与双向链表
法一 中序遍历把遇到的节点合并到链表中class Solution {public: //定义2个指针,分别指向双向链表正向和逆向的头节点 TreeNode *lefthead=nullptr; TreeNode *righthead=nullptr; //递归函数 TreeNode* Convert(TreeNode* pRootOfTree)...原创 2019-01-19 21:40:19 · 121 阅读 · 0 评论