剑指Offer
Nku_dong
这个作者很懒,什么都没留下…
展开
-
Python-剑指Offer(八):动态规划解决剪绳子问题
动态规划问题根据已知当绳子分段为f(2)时,返回1。当绳子分段为f(3)时,返回2。设置最大结果存储数组max_array用于存储f(n)->max_array[n]此时能取到的最大值,之后利用指针p对数组进行切分,一切为2。最大值赋值给max_array[n]def cut_rope(n): if n < 2: return 0 if n == ...原创 2019-02-27 19:36:24 · 1323 阅读 · 0 评论 -
Python-剑指Offer(一):python实现链表的基础操作
Python-剑指Offer(一):python实现链表的基础操作1.定义链表节点类定义链表中每个节点类ListNode,val表示链表节点的取值,next表示该节点下一跳的位置。class ListNode(object): def __init__(self, val, next_node): self.val = val self.next = ...原创 2019-02-23 15:31:03 · 627 阅读 · 0 评论 -
Python-剑指Offer(二):python根据前序和中序队列构造二叉树
Python-剑指Offer(二):python根据前序和中序队列构造二叉树1.定义树节点定义树节点类TreeNode,val表示节点取值,left_node,right_node表示左右子树。class TreeNode(object): def __init__(self, data, left_node, right_node): self.val = data...原创 2019-02-23 17:29:10 · 849 阅读 · 0 评论 -
Python-剑指Offer(三):查找中序遍历目标节点的前一个节点
1.构建二叉树根据二中方法构建目标二叉树,并输出前序遍历结果进行校验:pre_order = list('abdehicfg')mid_order = list('bdheiafcg')pre = Noneclass TreeNode(object): def __init__(self, data, left_node, right_node): self.v...原创 2019-02-23 20:38:15 · 441 阅读 · 0 评论 -
Python-剑指Offer(九):打印输出大数1-n
问题描述输入n,按顺序打印出1到最大的那位十进制数。比如输入3,打印出1、2、3到最大3位数999。算法思路int型存储有限,long型存储也不够。设置数组,以进位形式,输出结果。python代码:def print_num(n): n_array = (n+1) * [0] while n_array[n] == 0: i = 0 if ...原创 2019-02-28 10:00:08 · 442 阅读 · 0 评论 -
Python-剑指Offer(四):双栈模拟实现FIFO队列
通过链表实现栈定义栈的链表节点:class StackNode(object): def __init__(self, data, next): self.val = data self.next = next定义栈,并实现基础的入栈出栈判空操作:class Stack(object): def __init__(self): ...原创 2019-02-24 11:26:07 · 198 阅读 · 0 评论 -
Python-剑指Offer(五):Fibonacci数列
非递归,时间复杂度O(N)方法:def fibonacci(n): f0, f1, f2 = 0, 1, 0 if n == 0: return 0 if n == 1: return 1 i = 2 while i &amp;lt;= n: f2 = f0 + f1 f0 = f1 ...原创 2019-02-24 11:29:15 · 437 阅读 · 0 评论 -
Python-剑指Offer(六):青蛙跳台阶
问题描述青蛙跳台阶,一次可以跳两个台阶,也可以跳一个台阶。问青蛙跳到n个台阶,总共有多少种跳法。问题分析当台阶n1时,青蛙只有一次跳一个台阶这一种方法。因此f(1)=1。当台阶n2时,青蛙可以一次跳一个台阶,也可以一次跳两个台阶。共有两种方法。因此f(2)=2。当台阶n==3时,青蛙可以从台阶为1的位置一次挑两个台阶上来,也可以从台阶为2的位置一次跳一个台阶上来,共有3种方法。因此f(3...原创 2019-02-24 12:06:42 · 973 阅读 · 0 评论 -
Python-剑指Offer(七):二分法查询旋转数组中的最小元素
问题描述:1, 2, 3, 4, 5的旋转数组为:3, 4, 5, 1, 2要查询找到数组中的最小元素。时间复杂度小于O(N)。问题思路可以设置三个标志位left,right,mid来减少查询长度。定义3,4,5为原序序列;1,2为翻转子序列。如果中间元素array[mid]小于左边元素array[left],那么证明,中间元素属于翻转子序列。此时最小元素存在于标志位left-&amp;gt;mid...原创 2019-02-24 15:03:49 · 280 阅读 · 0 评论