剑指offer
还没想好116
这个作者很懒,什么都没留下…
展开
-
剑指offer、二叉搜索树的第K个结点(python)
题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路:二叉搜索树 的中序遍历,就是排序好的一个数组所以:只需要输出中序遍历的第K个数,也就是要找的第K小的结点例子:以题目中给的例子来看: (5,3,7,2,4,6,8),其二叉搜索树如下,左子树元素小于右子树元素他的中序遍历是: [...原创 2019-11-21 20:34:38 · 110 阅读 · 0 评论 -
剑指offer、按之字形打印二叉树(python)
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推代码(python):# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.le...原创 2019-11-21 19:49:35 · 98 阅读 · 0 评论 -
剑指offer、把二叉树打印成多行(python)
题目:从上到下按层打印二叉树,同一层节点从左向右输出,每一层输出一行代码(python):# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonecl...原创 2019-11-21 19:47:06 · 126 阅读 · 1 评论 -
剑指_复杂链表的复制(Python)
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)代码:class RandomListNode: def __init__(self, x): self.label = x se...原创 2019-10-30 21:29:32 · 73 阅读 · 0 评论 -
孩子们的游戏(圆圈中最后剩下的数)(Python)
题目:0,1,2,…,n-1这n个数字排成一个圈从数字0开始,每次从这个圆圈中删除第m个数字。求出这个圆圈中最后一个剩下的数字分析:可以用一个通式表示:代码:# -*- coding:utf-8 -*-class Solution: def LastRemaining_Solution(self, n, m): # write code here ...原创 2019-10-29 19:42:51 · 437 阅读 · 0 评论 -
反转链表详解(Python)
题目描述输入一个链表,反转链表后,输出新链表的表头。分析:先随表画一个链表:这个是反转后的链表,也是我们想要的:由于链表查找元素只能从头节点开始,我们可以想到,挨个挨个的将元素的指针指向前一个元素如果链表的长度趋于无穷大,每一次反转,将会是O(n)的复杂度,所以的总的复杂度是O(n^2).这种方法时间复杂度太高!看下面的解法解法详解:通过循环来解决问题:...原创 2019-10-26 11:48:33 · 551 阅读 · 0 评论 -
链表中倒数第K个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。代码(Python)# class ListNode:# def __init__(self, x): # 定义链表的结构# self.val = x# self.next = Noneclass Solution: def FindKthToTail(self, head,...原创 2019-10-25 16:12:26 · 57 阅读 · 0 评论 -
9、两个栈实现队列(Python)
# -*- coding:utf-8 -*-class Solution: def __init__(self): self.acceptStack = [] # 接受元素的栈 self.outputStack = [] # 弹出元素的栈 def push(self, node): # write code here ...原创 2019-10-17 20:32:10 · 71 阅读 · 0 评论 -
42、最大子序和(python)
class Solution: def FindGreatestSumOfSubArray(self, array): # write code here maxnum = None tmpnum = 0 for i in array: if maxnum == None: ...原创 2019-10-17 19:22:19 · 116 阅读 · 0 评论 -
31、栈的压入、弹出序列(Python)
题目:输入两个整数序列,第一个序列表示栈的压入顺序请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。例如:压入序列:{1,2,3,4,5},序列{4,5,3,2,1}是其对应的一个弹出序列,而序列{4,3,5,1,2}不是!!看着题时,先稍稍的提一下栈的含义:栈:栈的概念先举例说明一下:小时候,家里都有那种很大的手电筒(没用的自行脑补哈),往里面装那种特大的...原创 2019-10-17 15:10:42 · 339 阅读 · 0 评论 -
11、旋转数组的最小数字
旋转数组的概念:把一个数组最开始的若干个元素搬到数组的末尾,就是旋转数组。例如: 数组{1,2,3,4,5}的一个旋转数组就是{3,4,5,1,2}题目:输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素思路:这题最直观的解答就是遍历一遍数组,直接找出其中最小的元素。时间复杂度是O(n)。但是没有利用旋转数组的特性。我们可以再来看看旋转数组:旋转数组的特性:可以拆...原创 2019-10-10 21:35:45 · 74 阅读 · 0 评论 -
剑指_3.2不修改数组找出重复的数字(Python)
题目描述:在一个长度为 n+1 的数组里,所有的数字都在 1~n 的范围里,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如:如果输入长度为 8 的数组{2,3,5,4,3,2,6,7} ,那么对应的输出是重复的数字2或者3题目分析:一些简要的思路:这个题目和上一个题很是类似,但是由于不能修改数组,如果我们另外创建一个数组,来查找重复的...原创 2019-08-27 13:44:11 · 234 阅读 · 0 评论 -
剑指_4二维数组的查找(Python)
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题目分析:对题目的分析:我们选取二维数组右上角或者左下角的数字来不断的和目标整数做比较详细思路:以右上角来举例说明:首先我们选取数组右上角的数字。如果该数字等于要查找的数字,则查找过程结束。如果该数字大于...原创 2019-08-28 17:58:02 · 126 阅读 · 0 评论 -
剑指_5替换空格(Python)
题目描述:实现一个函数,把字符串中的每一个空格替换为“%20”。例如,输入“we are happy.” ,则输入“we%20are%20happy.”题目分析:对题目的分析:题目初始分析,首先想到将初始的一个空格字符,替换之后变成‘%’、‘2’、‘0’ 3个字符,故字符串整体是变长的如果在原始字符串上替换的话,就有可能修改字符串后面的字符内存如果是创建一个新的字符串,我们就可...原创 2019-08-29 16:39:06 · 70 阅读 · 0 评论 -
剑指_6从尾到头打印链表(Python)
题目介绍:输入一个链表的头节点,从尾到头反过来打印出每一个节点的值。题目分析:一些简要的思路:直接将链表的指针翻转过来,在一次打印就可以了但是面试官不一定让改动初始的链表对题目的分析:我们可以申请一个空的链表,遍历初始链表后,从后往前放入新的链表中。代码实现:# 非递归class ListNode: def __init__(self,x): s...原创 2019-08-30 21:04:49 · 109 阅读 · 0 评论 -
7、重建二叉树(Python)
代码实现:class TreeNode: def __init__(self,x): self.val = x self.left = None self.right = Noneclass Solution: # pre是前序遍历,tin是中序遍历 def reConstructBinaryTree(self,pre,t...原创 2019-10-08 22:28:06 · 103 阅读 · 0 评论 -
8、二叉树的下一个节点(Python)
题目给定一棵二叉树和其中一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还要一个指向父节点的指针。#// 普通二叉树#// a#// / \#// b c #// / \ / \#// ...原创 2019-10-08 23:45:49 · 235 阅读 · 0 评论 -
10、斐波那契数列,跳台阶问题(Python)
题目描述(一)求斐波那切数列的第n项写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义:用递归实现def Fibonacci(n): if n <= 0: return 0 elif n == 1: return 1 else: return Fibonacci(n-1) + Fibonacc...原创 2019-10-09 15:34:47 · 910 阅读 · 0 评论 -
二分查找递归、非递归实现(Python)
二分查找二分查找中,会不断将一个有序数组折半,大幅缩小查询的范围,直到找到目标元素的位置。优缺点优点:元素比较次数少,查找速度快,稳定性好缺点:要查询的数组必须是有序数组代码实现(非递归)# 二分查找def binary_search(array,x): ''' array: 目标数组(必须有序) x: 要查询的元素 ''' left...原创 2019-10-10 16:38:26 · 200 阅读 · 0 评论 -
剑指_3.1数组中重复的数字(Python/C++)
题目介绍:在一个长度为n的数组里,所有的数字都在0到n~1的范围内!数组中某些元素是重复的,有些是不重复的。请找出数组中任意一个重复的数字。题目分析:一些简要的思路:先把数组排序,排序好的数组要找出重复的数字很是容易,只需要从头到尾扫面一遍就可以了。排序的时间复杂度是O(nlogn)用哈希表表示:从头到尾按顺序扫描数组的每个数字,每扫描一个数字,就可以用O(1)的时间判断哈希表...原创 2019-08-24 22:26:22 · 93 阅读 · 0 评论