剑指offer
Jillian_sea
这个作者很懒,什么都没留下…
展开
-
【剑指offer】对称二叉树[Python]
题目要求:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:先写处二叉树的镜像二叉树,然后再判断二者的前序遍历是否一致踩过的坑:1. 直接令mirror=root,然后让mirror的left指向root的right,结果发现root也跟着变化,可能是浅拷贝的原因,所以后来直接就重新构建了一个二叉树的类;2. 代码测试中竟然有一个所...原创 2018-05-01 11:01:56 · 378 阅读 · 1 评论 -
[剑指Offer]扑克牌顺子[Python]
题目要求:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为...原创 2018-05-07 17:59:22 · 405 阅读 · 0 评论 -
[剑指Offer]栈的压入弹出序列[Python]
题目要求:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:当前出栈为a,则下一个出栈的数字在入栈序列中,可以是排在它后面的任意一项,也可以是...原创 2018-05-16 16:56:36 · 994 阅读 · 0 评论 -
[剑指Offer]二叉搜索树的第K各节点[Python]
题目:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。解题思路:二叉搜索树的中序遍历是递增的序列,所以只要得到树的中序遍历即可以完成.其实也可以从左子树最左边走K个值,也能得到最终的答案.中序遍历代码class Solution: # 返回对应节点TreeNode def MidTree(s...原创 2018-05-16 21:03:28 · 608 阅读 · 0 评论 -
[剑指OFFER]两个链表的第一个公共节点
解题思路:根据链表属性,若两个链表有公共节点,那从第一个公共节点开始,后面的节点都是一样的,所以两个链表呈Y行分布。思路是:先计算两个链表的长度,并分别放入堆栈中,再从后往前比较两个链表的节点是否相同,第一个不同节点的next就是第一个相同节点;注意特殊情况:短的链表的第一个节点为公共节点。ps:题目——{1,2,3,4}{6,7}{8,9}表示第一个链表是 {1,2,3,4,8,9}第二个链表是...原创 2018-06-23 11:13:08 · 243 阅读 · 0 评论 -
[剑指offer]数组中只出现一次的数【python】
题目要求:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。代码:# -*- coding:utf-8 -*-class Solution: # 返回[a,b] 其中ab是出现一次的两个数字 def FindNumsAppearOnce(self, array): # write code here result =...原创 2018-06-23 11:19:30 · 447 阅读 · 0 评论 -
[剑指Offer]和为S的连续正数序列[python]
题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序列内...原创 2018-06-23 14:23:33 · 717 阅读 · 0 评论 -
[剑指offer]和为S的两个数字[pyton]
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。解题思路:既然是排好序的,那就可以首尾齐发了(跟快排思路比较像)——从头开始一个指针left,尾部一个指针right,如果list[left]+list[right]>sum, 那right-1(值太大了,...原创 2018-06-23 14:30:04 · 216 阅读 · 0 评论 -
【剑指offer】左旋转字符串【python】
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!代码:# -*- coding:utf-8 -*-class Solution: def Le...原创 2018-06-23 15:02:46 · 445 阅读 · 0 评论 -
[剑指offer]翻转单词顺序列【python】
题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?代码:# -*- codi...原创 2018-06-23 15:14:51 · 595 阅读 · 0 评论 -
python的外部输入
Python的外部输入常用的有三种形式:input(), raw_input(), 和sys.stdin.readline()1. input:输入的数据类型按照Python定义来,即为input = eval(raw_input())所以如果输入的整型数字则变量类型即为int,若输入为float,则输入变量类型也为float;需要注意的是,当用input输入字符串时,需要给字符串加上...原创 2018-08-27 17:51:20 · 4184 阅读 · 0 评论 -
[剑指offer]删除链表中的重复节点【python】
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路描述:链表,构建一个pre节点,一个next节点,还有一个当前节点p, 比较p和next的值是否相同~ps:以前做链表的题都是新建list存放node,...原创 2018-09-10 10:34:32 · 950 阅读 · 0 评论 -
[剑指offer]链表中环的入口节点[python]
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解析:链接:https://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da16833f79a38e4来源:牛客网首先,找到第一次相遇的位置;然后,slow从链表头出发,fast从第一次相遇的位置出发,再次相遇时即为环开始的地方。证明如下...转载 2018-09-10 15:15:53 · 346 阅读 · 0 评论 -
【剑指offer】滑动窗口最大值【Python】
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,...原创 2018-09-25 10:23:56 · 363 阅读 · 0 评论 -
归并排序 + 统计数组逆数对个数 + 取余[Python]
剑指offer有一道题求数组中逆序数对的个数,用Python写了如下代码:# -*- coding:utf-8 -*-class Solution: def InversePairs(self, data): # write code here p = 0 num = 1000000007 while data: ...转载 2018-09-11 10:13:31 · 494 阅读 · 0 评论 -
[剑指Offer]丑数[Python]
题目要求:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路:我的解题思路是从1往后遍历把所有的丑数都找出来,在根据索引找出最后的结果,但事实证明时间复杂度太高了,所以去看了大家的答案.有的人讲的很明白,有一个用c++写的答案很明白,所以就把它变成了python,...原创 2018-05-20 10:21:19 · 1048 阅读 · 0 评论 -
【剑指offer】平衡二叉树[Python]
题目要求:输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:递归问题,判断每一个节点构成的树是否为平衡二叉树,有不是的则记为0,是的则记为1,故最后如果list中有0存在则说明有不是平衡二叉树的节点,则返回false但是,有重复遍历的节点,复杂度太高了~以后写的时候优化一下第一次代码:class Solution: def TreeDepth(self, root,list_len,lis...原创 2018-05-01 11:29:48 · 373 阅读 · 0 评论 -
【剑指Offer】中序遍历的下一个节点[Python]
题目要求:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针思路:分情况讨论:1.如果pNode有右子树,则中序遍历下一个为右子树2.若pNode右子树为空,但pNode是其父节点的左子树,则下一个为其父节点3. 若pNode右子树为空且pNode是其父节点的右子树,则表示父节点代表的二叉树已经遍历完毕,那就要回到父...原创 2018-05-01 15:46:11 · 368 阅读 · 0 评论 -
【剑指Offer】之字形打印二叉树[Python]
【题目要求】:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。【解题思路】:之字形打印-->先遍历后进来的节点的子树-->类似于栈的思想设置一个栈用来装上一层的节点(源节点,根据这一个栈的节点遍历它的左右子树,遍历完这一层之后会变成空栈),但遍历到的左右子树也需要进栈,所以有要设置一个中间转...原创 2018-05-02 21:32:14 · 416 阅读 · 0 评论 -
【剑指Offer】按行打印二叉树[Python]
【题目要求】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。【解题思路】队列实现/两个栈。跟按照之字形打印二叉树相比,省去了反转顺序(上一篇中direction的地方),同时注意每次调用子函数的时候不再是pop()(从结尾出),而是从头出(pop(0))【第一次代码】class Solution: def Zprint(self, list_out,stack): ...原创 2018-05-02 21:44:20 · 588 阅读 · 0 评论 -
[剑指Offer]机器人走格子[Python]
题目要求:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思路:预备工作----->将每一行和...原创 2018-05-09 19:39:56 · 2163 阅读 · 1 评论 -
[剑指Offer]复杂链表的复制[Python]
题目要求:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路:一开始都没看懂题,后来看了大家的评论才知道复杂链表的复制是咋回事.思路就是先遍历链表,把next的节点都复制好,然后再查看每个节点的random指向哪里了,就让新链表...原创 2018-05-17 14:54:16 · 509 阅读 · 0 评论 -
剑指offer:[编程题]二叉树中和为某一值的路径(Python)
题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。第一次做的解题思路:二叉树的深度优先搜索~搜索到叶子节点后,将该叶子节点pop出来,同时记得num要加回去,开始另一条支路的搜索~ 几点注意: 1.深拷贝和浅拷贝的区别,深拷贝要用copy.deepcopy() 2.为了防止路径只到...原创 2018-04-26 20:11:49 · 374 阅读 · 0 评论 -
剑指Offer:二叉搜索树与双向链表[Python]
第一次代码:(2018.4.26)解题思路:先中序遍历,然后对list排序,然后改变节点的指向 class Solution: def MidOder(self, root, list_tree, list_val): if root: if root.left: self.MidOder(root.left,l...原创 2018-04-26 21:30:04 · 437 阅读 · 0 评论 -
[剑指Offer]字符串排列问题[Python]
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。解题思路:这道题想的时候思路来的还挺快的,但是真的写了很久,有一些用法还不太熟悉,得一点一点地查找.如,输入abc,则思路如下:即将元素左右空都设置成#,则新来一个字符只要插空就行了.如果 ...原创 2018-05-17 20:05:49 · 474 阅读 · 0 评论 -
[剑指Offer]数组中出现次数超过一半的数字[Python]
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。代码:class Solution: def MoreThanHalfNum_Solution(self, numbers): num_list = list(...原创 2018-05-17 20:36:03 · 212 阅读 · 0 评论 -
[剑指Offer]最小的K个数[Python]
题目要求:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路:最简单的冒泡排序,当然不是最有答案,复杂度太大O(nk)# -*- coding:utf-8 -*-class Solution: def GetLeastNumb...原创 2018-05-17 21:17:12 · 378 阅读 · 0 评论 -
[剑指Offer]连续子数组的最大和[Python]
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度...原创 2018-05-18 14:42:51 · 222 阅读 · 0 评论 -
[剑指Offer] 整数中1出现的次数(从1到n整数中1出现的次数)[Python]
题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。解题思路:将1~n的所有数字转化成str然后把所有的str合成一个str找出这个str中1的个数代码:cla...原创 2018-05-18 15:08:41 · 445 阅读 · 0 评论 -
剑指Offer:二叉树的深度[Python]
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路:二叉树的深度搜索第一次解题代码:class Solution: def PathList(self, root, list_node,list_len): if root: list_node.append(root)...原创 2018-04-27 21:23:20 · 154 阅读 · 0 评论 -
[剑指Offer][Python]
题目要求:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路:按位比较代码:class Solution: def PrintMinNumber(self, numbers): if numbers: num_str = [...原创 2018-05-18 21:41:27 · 240 阅读 · 0 评论 -
代码准备/封装函数[pythno]
1. 统计list中各个元素索引值:def Dict_Count(self, lis): dic = {} index = 0 for key in lis: if key not in dic: dic[key] = [index] else: ...原创 2018-09-11 11:05:44 · 170 阅读 · 0 评论