剑指offer
小火箭丶
求实求真
展开
-
机器学习-专项训练
准确率是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率为了解决准确率和召回率冲突问题,引入了F1分数 位势函数法的积累势函数K(x)的作用相当于Bayes判决中的() 类概率密度与先验概率的乘积 从使用的主要技术上看,可以把分类方法归结为哪几种类型规则归纳方法 贝叶斯分类方法 决策树分类方法基于距离的分类方...原创 2020-07-16 09:46:23 · 1742 阅读 · 0 评论 -
剑指offer 后序遍历
Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object):...原创 2019-10-28 19:01:38 · 114 阅读 · 0 评论 -
剑指offer 中序遍历
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = None class Solution(object): ...原创 2019-10-28 18:33:26 · 125 阅读 · 0 评论 -
剑指offer 先序遍历
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = None class Solution(object): ...原创 2019-10-28 18:30:33 · 126 阅读 · 0 评论 -
剑指offer 快速排序
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 算法思路 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部...原创 2019-10-24 17:11:37 · 188 阅读 · 0 评论 -
剑指offer 希尔排序
算法说明:希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 时间复杂度o(n^2)...原创 2019-10-23 15:33:46 · 117 阅读 · 0 评论 -
剑指offer 归并排序
算法思想 归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。 二分分解的思路 算法复杂度o(nlogn) def merge_sort...原创 2019-10-22 15:51:55 · 149 阅读 · 0 评论 -
剑指offer 二分法搜索
算法思维:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后...原创 2019-10-22 15:43:47 · 255 阅读 · 0 评论 -
剑指offer 插入排序
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 最优时间复杂度o(n)、最坏o(n^2) def insert_sort(alist): # 从第...原创 2019-10-22 15:18:39 · 164 阅读 · 0 评论 -
剑指offer 选择排序
选择排序的思想: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,...原创 2019-10-22 15:06:47 · 132 阅读 · 0 评论 -
剑指offer-61 序列化二叉树 排序加重构
题目要求:请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)二叉树的反序列化是指:根据某种遍历顺序得到的...原创 2019-10-18 20:34:59 · 123 阅读 · 0 评论 -
剑指offer-58 对称二叉树
题目要求:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解题思路:镜像比较 必须为满二叉 class TreeNode: def __init__(self, x): self.val = x self.left = None self.right =...原创 2019-10-18 20:01:37 · 144 阅读 · 0 评论 -
剑指offer-57 二叉树的下一个结点
题目要求:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。、 解题思路://分析二叉树的下一个节点,一共有以下情况: //1.二叉树为空,则返回空; //2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点; //3.节点不是根节点。...原创 2019-10-18 19:50:00 · 111 阅读 · 0 评论 -
剑指offer-52 正则表达式匹配
题目要求:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 解题思路:见代码 class Solution: # s,...原创 2019-10-18 15:19:24 · 213 阅读 · 0 评论 -
剑指offer-39 平衡二叉树
题目要求:输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题思路:条件就是左右枝深度相差小于等于1 class Solution: res = True def IsBalanced_Solution(self, pRoot): # write code here self.helper(pRoot) re...原创 2019-10-18 11:28:33 · 112 阅读 · 0 评论 -
剑指offer-35 数组中的逆序对
题目要求:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 解题思路:归并排序 (有点类似二叉树的感觉) count = 0 # 归并排序 有点类似于二叉树的感觉class Solution: def I...原创 2019-10-18 10:59:31 · 93 阅读 · 0 评论 -
剑指offer-27 字符串的排列
题目要求:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 解题思路:回溯递归 依次固定一位 后面全排列即可 class Solution: def Permutation(self,ss): if len(ss) <...原创 2019-10-18 10:24:28 · 113 阅读 · 0 评论 -
二叉树的前序遍历,中序遍历和后序遍历(python实现)
https://blog.csdn.net/qq_26890109/article/details/80909044转载 2019-10-17 22:11:16 · 205 阅读 · 0 评论 -
剑指offer-23 二叉搜索树的后序遍历序列
题目要求:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 解题思路:判断左子树小于根 右子树大于根 class Solution: def VerifySquenceOfBST(self, sequence): size = len(sequence) ...原创 2019-10-17 22:03:56 · 120 阅读 · 0 评论 -
剑指offer-67 剪绳子
题目要求:给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 解题思路:归纳 3 =1 2; 4= 2 2; 5 =2 3; 6 =3...原创 2019-10-17 21:36:51 · 106 阅读 · 0 评论 -
剑指offer-63 数据流中的中位数
题目要求:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 解题思路:先排序在取中值 class Solution:#先排序 在算中位数 ...原创 2019-10-17 21:11:45 · 121 阅读 · 0 评论 -
剑指offer-24 二叉树和某一值得路径
题目要求:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 解题思路:递归得思想(栈) class Solution: def FindPath(self, root, expectNumber): ...原创 2019-10-17 20:35:31 · 106 阅读 · 0 评论 -
剑指offer-26 二叉搜索树与双向链表
题目要求:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 解题思路: 中序遍历+链表链接 def Convert(pRootOfTree):#中序 if not pRootOfTree: return None#空返回NONE stack = [] p = pRootOfTre...原创 2019-10-16 10:23:41 · 112 阅读 · 0 评论 -
剑指offer-62 二叉搜索树的第K个结点
题目要求:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 解题思路:中序遍历 #二叉搜索树解法 小中大 中序遍历 恰好按序排列class Solution: # 返回对应节点TreeNode def KthNode(self, pRoot, k): ...原创 2019-10-14 09:15:18 · 106 阅读 · 0 评论 -
剑指offer-60 把二叉树打印成多行
题目要求:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 解题思路:层次遍历 弹前面的 后序遍历是弹后面的加输出反转 class Solution: # 返回二维列表[[1,2],[4,5]] def Print(self, pRoot): # write code here if not pRoot: r...原创 2019-10-14 08:48:16 · 106 阅读 · 0 评论 -
剑指offer-59 按之字形顺序打印二叉树
解题思路:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推 class Solution: def Print(self, pRoot): # write code here if not pRoot: return [] res =...原创 2019-10-14 08:44:34 · 105 阅读 · 0 评论 -
剑指offer-38 二叉树的深度
题目要求:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 解题思路:层次遍历 class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = N...原创 2019-10-13 16:31:20 · 91 阅读 · 0 评论 -
剑指offer-22 从上往下打印二叉树
题目要求:从上往下打印二叉树 即层次遍历 解题思路:队列 def PrintFromTopToBottom(root): # write code here if not root: return [] queue = [root] res = [] while queue: node = queue.pop...原创 2019-10-13 16:17:49 · 84 阅读 · 0 评论 -
剑指offer-18 二叉树镜像
题目要求:操作给定的二叉树,将其变换为源二叉树的镜像。 解题思路:替换左右节点即可 递归 class Solution:#推导 # 返回镜像树的根节点 def Mirror(self, root): # write code here if not root: return root ...原创 2019-10-13 16:14:35 · 106 阅读 · 0 评论 -
剑指offer-17 树的子结构
题目要求:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路:递归 注意出口的设置 class Solution:#类 对象 # write code here def helper(self,treeA, treeB): if not treeB:#出口 retu...原创 2019-10-13 16:08:34 · 73 阅读 · 0 评论 -
剑指offer-4 重建二叉树
题目要求:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回 解题思路:递归思路解决 一直找寻根即可 终止条件是pre为0 class TreeNode: def __init__...原创 2019-10-13 15:49:36 · 97 阅读 · 0 评论 -
剑指offer-68 冒泡排序
# coding:utf-8def bubble_sort(alist): """冒泡排序"""#最右边肯定是最大的 n = len(alist) for j in range(n-1): count = 0 for i in range(0, n-1-j): # 班长从头走到尾 if ...原创 2019-10-12 15:59:25 · 97 阅读 · 0 评论 -
剑指offer-25 复杂链表的复制
题目要求:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解题思路:双向指针 首先是将next结点的 对应链表复制 然后放入字典 在找随机点利用字典在赋值 python指向是变量的地址. class R...原创 2019-10-09 19:58:49 · 134 阅读 · 1 评论 -
剑指offer-16 合并两个排序的链表
题目要求:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则 解题思路:从头到尾判断结点val即可 需考虑链表长度不一 class ListNode: def __init__(self, x): self.val = x self.next = Nonedef Merge(pHead1...原创 2019-10-09 19:43:58 · 99 阅读 · 0 评论 -
剑指offer-15 反转链表
题目要求:输入一个链表,反转链表后,输出新链表的表头。 解题思路:利用pre cur tmp 三个指针交换链表next指向 class Solution: # 返回ListNode def ReverseList(self, pHead): # write code here if pHead==None or pHead....原创 2019-10-09 19:32:09 · 84 阅读 · 0 评论 -
剑指offer-14 链表中倒数第K个结点
题目要求:输入一个链表,输出该链表中倒数第k个结点。 解题思路:双指针实现 def FindKthToTail(head, k): # write code here if not head: return None fast_p = head slow_p = head for _ in range(k): if ...原创 2019-10-09 19:20:15 · 91 阅读 · 0 评论 -
剑指offer-3 从尾到头打印链表
题目要求:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解题思路:栈的思想 先进后出 class ListNode(object):#就是想搞个节点出来 不然值就是地址了 next的重要性 def __init__(self, x): self.val = x self.next = None ...原创 2019-10-09 19:06:00 · 87 阅读 · 0 评论 -
剑指offer-37 数字在排序数组中出现的次数
题目要求:统计一个数字在排序数组中出现的次数。 解题思路:二分法+左右判断即可 class Solution: # 二分法找到k值的位置 def BinarySearch(self, data, mlen, k):#二分法思路 S+e/2 比较 mid 移动 反复 start = 0 end = mlen - 1 ...原创 2019-10-08 13:04:24 · 103 阅读 · 0 评论 -
剑指offer-64 滑动窗口的最大值
题目要求:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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...原创 2019-10-08 12:50:44 · 96 阅读 · 0 评论 -
剑指offer-34 第一个只出现一次的字符
题目要求:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 解题思路:哈希表 先统计 再查找为1的 def FirstNotRepeatingChar(s): # write code here map = {} for i in ra...原创 2019-10-08 12:42:28 · 100 阅读 · 0 评论