随笔分类 -  剑指offer小记

摘要:题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 解题思路: 利用层次遍历的思想。序列化时,节点值用“ ”空格隔开,空节点使用“#”代替。 反序列化时把提取出来的节点放入队列中,每次循环都处理的是该节点的左右儿子节点。 class Solution { public: char* Seria 阅读全文
posted @ 2019-04-13 18:35 tcgoshawk 阅读(189) 评论(0) 推荐(0)
摘要:题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 解题思路: 这个题目跟打印“之”字形想法类似,不过这里使用的是两个队列,循环存储每层的节点。 class Solution { public: vector<vector<int> > Print(TreeNode* pRo 阅读全文
posted @ 2019-04-13 16:19 tcgoshawk 阅读(136) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。、 解题思路: 使用两个栈来存放从左向右或者从右向左的每层节点,然后使用变量记录层级。 class Solution { public: vect 阅读全文
posted @ 2019-04-13 15:55 tcgoshawk 阅读(103) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解题思路: 使用队列保存所有的镜像节点,如果队列中只有一个节点,则比较左右节点是否相同,相同则放入队列;如果队列有多个节点,则拿出前两个,比较t1的左儿子与t2的右儿子是否相同, 阅读全文
posted @ 2019-04-13 11:36 tcgoshawk 阅读(149) 评论(0) 推荐(0)
摘要:题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路: 情况一 阅读全文
posted @ 2019-04-12 20:18 tcgoshawk 阅读(350) 评论(0) 推荐(0)
摘要:题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题思路: 使用三个指针:preNode指向值没有重复的最后一个节点、nowNode当前的节点、nextNode当前 阅读全文
posted @ 2019-04-12 18:39 tcgoshawk 阅读(751) 评论(0) 推荐(0)
摘要:题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 解题思路: 使用快慢指针,慢指针p1一次走1步,快指针一次走2步,首先如果有环,那么必定会在环中某个位置相遇,且此时快指针比慢指针多走了一个环的距离。 我们假设从头节点到入口节点的距离是a,从入口节点到相遇点的距离 阅读全文
posted @ 2019-04-12 17:09 tcgoshawk 阅读(127) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 请实现一个函数用来判断字符串是否表示数值 阅读全文
posted @ 2019-04-12 12:47 tcgoshawk 阅读(332) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均 阅读全文
posted @ 2019-04-12 11:13 tcgoshawk 阅读(230) 评论(0) 推荐(0)
摘要:题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。 解题思路: 从前往后累积乘积在每个数组元素中,然后从后往前累乘一个结果。 class 阅读全文
posted @ 2019-04-11 21:58 tcgoshawk 阅读(235) 评论(0) 推荐(0)
摘要:题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路: 思路一: 阅读全文
posted @ 2019-04-11 19:24 tcgoshawk 阅读(158) 评论(0) 推荐(0)
摘要:题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 解题思路: 第一反应就是位运算。不过还是参考了讨论区的做法。 其实主要思想是将进位的值与进位后剩余的值分开考虑。进位的值求解方法是(A&B)<<1,进位后剩余的值求解方法是A^B。我们只要循环判断是否进位为0了 阅读全文
posted @ 2019-04-11 18:06 tcgoshawk 阅读(123) 评论(0) 推荐(0)
摘要:题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任 阅读全文
posted @ 2019-04-11 12:20 tcgoshawk 阅读(157) 评论(0) 推荐(0)
摘要:题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.. 阅读全文
posted @ 2019-04-10 21:39 tcgoshawk 阅读(82) 评论(0) 推荐(0)
摘要:题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。 解题思路: 遍历数组,二分找另一个数字。跟《和为S的连续正数序列》基本类似。 class Solutio 阅读全文
posted @ 2019-04-10 17:19 tcgoshawk 阅读(125) 评论(0) 推荐(0)
摘要:题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快 阅读全文
posted @ 2019-04-10 16:59 tcgoshawk 阅读(117) 评论(0) 推荐(0)
摘要:题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 解题思路: 思路一: 常规思路,用map记录所有数字出现的次数,找到只出现1次的数字。 思路二: 思路清奇,使用异或运算。由于除了两个数字不同外,其他都是成对出现的,那么将所有数字进行异或以后,这 阅读全文
posted @ 2019-04-10 15:45 tcgoshawk 阅读(379) 评论(0) 推荐(0)
摘要:题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题思路: 这里所说的平衡二叉树不要求是搜索树,平常意义上的二叉平衡树一般都是指平衡二叉搜索树。 那么只需要判断任何一个节点的左右子树高度差是否大于1即可。 class Solution { public: bool isBalanTree 阅读全文
posted @ 2019-04-09 23:18 tcgoshawk 阅读(164) 评论(0) 推荐(0)
摘要:题目描述 统计一个数字在排序数组中出现的次数。 解题思路: 思路一: 正常遍历数组,找到k第一个出现的位置,然后累加直到不是k。实现简单。 思路二: 有序数组,考虑使用二分查找,查找第一k的位置和最后一个k的位置,距离即为次数。 //思路一 class Solution { public: int 阅读全文
posted @ 2019-04-09 21:39 tcgoshawk 阅读(164) 评论(0) 推荐(0)
摘要:题目描述 输入两个链表,找出它们的第一个公共结点。 解题思路: 思路一:先遍历一个链表,将所有节点记录,再遍历另外一个遍历,当第一个节点发现重复时,此节点就是结果,否则返回空。需要借助set这样的数据结构。 思路二:参考别人的思路。我们假设A与B有公共节点,链表A的长度为a+n,链表B的长度为b+n 阅读全文
posted @ 2019-04-09 18:27 tcgoshawk 阅读(185) 评论(0) 推荐(0)