数据结构
szx_0101
这个作者很懒,什么都没留下…
展开
-
python实现剑指offer系列:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码:class Node: def __init__(self, data, left, right): self.data = data原创 2017-07-10 16:11:06 · 4341 阅读 · 0 评论 -
python剑指offer 链表中环的入口节点
题目:一个链表中包含环,请找出该链表的环的入口结点。思路://先说个定理:两个指针一个fast、一个slow同时从一个链表的头部出发//fast一次走2步,slow一次走一步,如果该链表有环,两个指针必然在环内相遇//此时只需要把其中的一个指针重新指向链表头部,另一个不变(还在环内),//这次两个指针一次走一步,相遇的地方就是入口节点。python solution:# -*- coding:ut...原创 2018-03-09 16:09:18 · 1162 阅读 · 0 评论 -
python剑指offer系列二叉树的下一个节点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。solution思路:第一步还是找到某个节点的根节点,方法是一直使用next判断即可。 再将从根节点中序遍历的结果保存到一个数组中,直接找pNode所在索引的下一个即可。当然要考虑这个节点是不是最后一个,如果是最后一个,直接返回None。代码:# -*- co...原创 2018-03-02 10:23:07 · 256 阅读 · 0 评论 -
python剑指offer系列对称的二叉树
题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。solution:/*思路:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同* 左子树的右子树和右子树的左子树相同即可,采用递归代码:# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):...原创 2018-03-02 10:54:02 · 216 阅读 · 0 评论 -
python剑指offer系列把二叉树打印成多行
题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:按层遍历,遍历完每层后更新solution:# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right...原创 2018-03-02 15:12:55 · 243 阅读 · 0 评论 -
python剑指offer系列按之字形顺序打印二叉树
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:层次遍历的变种solution:# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# sel...原创 2018-03-02 15:42:58 · 441 阅读 · 0 评论 -
python剑指offer系列二叉搜索树的第k个结点
题目:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 24 6 8 中,按结点数值大小顺序第三个结点的值为4。思路:中序遍历的二叉搜索树就是排序的代码:# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# ...原创 2018-03-17 10:08:59 · 377 阅读 · 0 评论 -
python剑指offer字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:回溯法代码:class Solution: def __init__(self): self.result=[] def Permutation(self, ss): ...转载 2018-03-17 11:26:39 · 761 阅读 · 0 评论 -
python剑指offer连续子数组的最大和
题目:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少...原创 2018-03-17 11:56:40 · 467 阅读 · 0 评论 -
python剑指offer系列和为S的连续正数序列
题目:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?思路:连续正数序列为等差数列,和为cur =(low + high)*(...原创 2018-03-04 10:31:25 · 410 阅读 · 0 评论 -
python剑指offer系列和为S的两个数字
题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的思路:数列满足递增,设两个头尾两个指针i和j, 若ai + aj == sum,就是答案(相差越远乘积越小) 若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j -= 1 若ai + aj < sum,...原创 2018-03-04 10:55:38 · 999 阅读 · 0 评论 -
python归并排序
代码:def merge_sort(arr): if len(arr) == 1: return arr mid = len(arr)//2 l= arr[:mid] r = arr[mid:] left = merge_sort(l) right = merge_sort(r) return merge(left,righ...原创 2018-03-18 15:17:02 · 389 阅读 · 0 评论 -
最长回文串
回文就是中心对称的单词。从字符的中心开始,向两边扩散检查回文。这需要维护一个指针,从头开始,以每一个位置为中心遍历一遍。这比暴力遍历所有子串省了很多重复判断。以某个字符为核心一旦探测到边界,更长的的串就都不再考虑。复杂度O(n^2)。注意,回文需要同时检查单核`aba`以及双核`abba`的情况。代码:res = ""maxs = 0def findHuiwen(newstr): ...原创 2018-03-19 13:57:57 · 338 阅读 · 0 评论 -
python剑指offer系列通过求二叉树的深度来理解递归
二叉树如下所示递归求二叉树的深度代码如下:class Solution: def TreeDepth(self, pRoot): if pRoot == None: return 0 left ,right = self.TreeDepth(pRoot.left) , self.TreeDepth(pRoot.right) ...原创 2018-02-28 18:42:38 · 740 阅读 · 0 评论 -
python剑指offer系列第一个只出现一次的字符
题目:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置思路:建立一个哈希表即可,python用字典代替,但是是无序的,所以再遍历一次字符串# -*- coding:utf-8 -*-class Solution: def FirstNotRepeatingChar(self, s): if len(s)...原创 2018-02-28 12:16:21 · 629 阅读 · 0 评论 -
python剑指offer系列二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。sulution:先中序遍历,将所有的节点保存到一个列表中。对这个list[:-1]进行遍历,每个节点的right设为下一个节点,下一个节点的left设为上一个节点。# -*- coding:utf-8 -*-# class TreeNode:# def __init...原创 2018-02-28 11:44:52 · 251 阅读 · 0 评论 -
python 剑指offer系列:反转链表
题目:输入一个链表,反转链表后,输出链表的所有元素。代码:# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回ListNode def ReverseList原创 2017-07-10 17:21:41 · 360 阅读 · 0 评论 -
Python快速排序
代码如下,快排采用分治的思想def quick(arr,f,l): if f >= l: return else: i = f - 1 for j in range(f,l): if arr[j] <= arr[l]: i += 1 arr[i],原创 2017-07-05 14:44:36 · 322 阅读 · 0 评论 -
python实现剑指offer系列:二维数组的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。python实现代码# -*- coding:utf-8 -*-class Solution: # array 二维列表 def Find(self, target, array): m = le原创 2017-07-09 14:30:19 · 303 阅读 · 0 评论 -
python实现剑指offer系列2:字符串空格替换
牛客网题目链接:https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking 题目:请实现一个函数,将一个字原创 2017-07-09 14:49:34 · 304 阅读 · 0 评论 -
python 实现剑指offer系列3:从尾到头打印链表
newcoder:https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking题目:输入一个链表,从尾到头打印原创 2017-07-09 21:20:30 · 263 阅读 · 0 评论 -
python剑指offer系列斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39网址:https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tpId=13&tqId=11160&tPage=1&rp=1&ru=/ta/coding-interviews&qr...原创 2017-08-21 16:13:00 · 274 阅读 · 0 评论 -
python剑指offer 链表倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。思想:利用两个指针,第一个指针f到达k之后,新建一个指针sencond,遍历最后一个时sencond则为倒数第k个结点# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Non原创 2017-12-04 19:45:03 · 212 阅读 · 0 评论 -
python剑指offer系列滑动窗口的最大值
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,5,1}, {2...原创 2018-01-14 21:44:23 · 1025 阅读 · 0 评论 -
python剑指offer系列层序遍历二叉树
class Solution: # 返回从上到下每个节点值列表,例:[1,2,3] def PrintFromTopToBottom(self, root): lists = [] if root == None: return que1 = [] que1.append(root) ...原创 2018-01-15 09:45:33 · 1169 阅读 · 0 评论 -
python剑指offer系列树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解法:对于两棵二叉树来说,要判断B是不是A的子结构,首先第一步在树A中查找与B根节点的值一样的节点。 通常对于查找树中某一个节点,我们都是采用递归的方法来遍历整棵树。 第二步就是判断树A中以R为根节点的子树是不是和树B具有相同的结构。 这里同样利用到了递归的方法,如果节点R的值和树的根节点不...原创 2018-02-09 19:59:12 · 222 阅读 · 0 评论 -
python剑指offer系列二叉树中和为某一值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:其实就是深度优先遍历,到达叶子结点时判断target是否为零,注意每次递归一轮时需要回溯。solution# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):#...原创 2018-02-10 10:47:56 · 965 阅读 · 0 评论 -
python剑指offer系列复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)solution:###复杂链表的复制(哈希法)class RandomListNode: def __init__(self, x): self.lab...原创 2018-02-27 14:12:44 · 332 阅读 · 0 评论