自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Kubeflow】KFServing的架构分析

KFServing的架构架构包含两个部分,分别是Data Plane和Control Plane。Control Plane主要负责管理模型的生命周期,而Data Plane主要负责在模型部署后进行模型间的数据交互。分为三层,最外层是Kubernetes集群组件,包含Kubernetes集群的负载均衡器。在模型在Kubernetes集群中发布服务,用户的预测请求首先被Kubernetes集群组件接收,在Kubernetes集群级别进行负载均衡。在InferenceService发布成功后

2020-11-15 22:04:37 18

原创 Golang微服务接入Xgboost模型的经验

在线预测平台包括几个部分:特征获取 特征变换 模型服务可使用的Github项目(二选一),我使用的leaveshttps://github.com/Unity-Technologies/go-xgboost star:42 https://github.com/dmitryikh/leaves star:204模型加载方式冷加载,服务启动的时候加载 优点是开发简单快捷 缺点是新增模型需要发版,扩展性不足,只能单个项目使用 热加载,使用公共盘方式,请求的时候加载模型 优

2020-09-20 19:56:00 73

原创 【剑指Offer】43.扑克牌的顺子

题目描述从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小旺可以看成任意数字。解题思路怎么判断5个数字是不是连续的,最直观的方法就是把数组排序。由于0可以当成任意数字,可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要有足够的0可以补满这两个数字的空缺。需要做的三件事情:首先把数组排序,再统计数组中0的个数,最后统计排序之后的数组中相邻数字之间的空缺总数。如果空缺的

2020-07-17 23:06:00 26

原创 【剑指Offer】39.平衡二叉树

题目描述输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。解题思路简单解法遍历树的每个结点时候,调研函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差不超过1,那就是平衡二叉树代码简洁,但是同一个结点会被重复遍历多次,时间效率不高。需要寻找一个不需要重复遍历的算法每个结点只遍历一次的解法用后序遍历的方式二叉树的每一个结点,在遍历到一个结点之前就已经遍历了它的左右子树,只需

2020-07-05 14:42:02 21

原创 【剑指Offer】38.二叉树的深度

题目描述一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路简单法得到树的所有路径,然后从众得到最长的路径及它的长度简洁法如果一棵树只有一个结点,它的深度为1,如果根结点只有左子树而没有右子树,那树的深度应该在其左子树的深度加1;同样如果只有右子树没有左子树,那树的深度应该是其右子树的深度加1。如果既有左子树也有右子树,那该树的深度就是其左、右子树深度的较大值再加1。# -*- coding:u

2020-07-05 14:27:02 20

原创 【剑指Offer】37.数字在排序数组中出现的次数

题目描述统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4解题思路简单法因为数组是排序的,自然而然的想到用二分查找法。先用二分查找算法找到一个3,然后在找到的3的左右两边顺序扫描,分别找出第一个3和最后一个3。因为要查找的数字在长度为n的数组中有可能出现O(n)次,所以顺序扫描的时间复杂度是O(n)。思考如何更好地利用二分查找算法有没有可能用二分查找算法直接找到第一个k及最后一个k呢?那数组中间

2020-07-05 10:32:27 30

原创 【剑指Offer】36.两个链表的第一个公共结点

题目描述输入两个链表,找出它们的第一个公共结点。解题思路暴力求解在第一链表上顺序遍历每个结点,每遍历到一个结点的时候,在第二个链表上顺序遍历每个结点。如果在第二个链表上有一个结点和第一个链表上的结点一样,说明两个链表在这个结点上重合,于是就找到公共结点。如果A链表长度为m,B链表长度为n,那方法的时间复杂度是O(m*n)空间换时间的解法分析有公共结点的两个链表有哪些特点。如果是单链表,只要有一个结点是公共的,那么从某一结点开始,后面的都是重合的。如果两个链表有公共结点,那么公

2020-07-04 23:23:10 16

原创 【剑指Offer】35.数组中的逆序对

题目描述在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6),(7,5),(7,4),(6,4),(5,4)解题思路顺序扫描整个数组,每扫描到一个数字的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组成了一个逆序对。假设数组中有n个数字。由于每个数字都要和O(n)个数字作比较,因此这个算法的时间复杂度是O(n^2)考虑想

2020-07-03 20:01:25 15

原创 【剑指Offer】34.第一个只出现一次的字符

题目描述在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'解决思路最直观的方法从头开始扫描这个字符串中的每个字符,当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符技术只出现一次的字符。时间复杂度是O(n^2)借助容器的方法用一个容器来存放每个字符的出现次数,根据字符来查找它出现的次数,哈希表定义哈希表的键值是字符,而值是该字符出现的次数。还需要从头开始扫描字符串两次。第一次扫描字符串时,每扫描到一个字符就在

2020-06-28 22:34:58 821

原创 【剑指Offer】33.丑数

题目描述我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6,8都是丑数,但14不是,因为它包含因子7。习惯上把1当做第一个丑数。解题思路暴力判断一个数是另一个数n的因子,是指n能被m整除,也就是n%m == 0,根据定义,只能被2、3和5整除,如果一个数能被2整除,把它连续除以2;如果能被3整除,连续除以3。如果能被5整除,那就除以连续5。如果最后得到的是1,那么这个数就是丑数。更高效的解法创建数组保存已经找到的丑数,用

2020-06-27 17:58:11 16

原创 【剑指Offer】30.连续子数组的最大和

题目描述输入一个整型数组,数组里有正数也有负数。数组中有一个或连续的多个正数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},输出为该子数组的和18解题思路解法一:暴力求解枚举出数组的所有子数组并求出他们的和长度为n的数组,总共有n(n+1)/2个子数组的和,最快也需要O(n^2)解法二:举例分析数组的规律试着从头到尾逐个累加示例数组中的每个数字。初始化和为

2020-06-13 23:23:52 36

原创 【剑指Offer】29.最小的k个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路最简单的思路:把输入的n个正数排序,排序之后位于最前面的k个数就是最小的k个数。O(nlogn)O(n)的算法,当我们可以修改输入的数组时可用通过数组的第k个数字来调整,使得比第k个数字小的所有数字都位于数组的左边,比k个数字都打的所有数字都位于数组的右边。这样调整之后,位于数组中左边的k个数字就是最小的k个数字基于Partition函数的思路

2020-06-12 23:56:12 42

原创 【剑指Offer】28.数组中出现次数超过一半的数字

题目描述数组中有一个数字出现次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2解题思路第一个想法是排序,时间复杂度O(nlogn)解法一:基于Partition函数的O(n)算法数组的特性,如果数组中有一个数字出现的次数超过了数组长度的一半。如果把这个数组排序,那么排序之后位于数组中间的数组一定就是那个出现次数超过数组长度一半的数字。数组的中位数,长度为n的数组中的

2020-06-09 23:13:23 37

原创 【剑指Offer】27.字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路如何求出几个字符的所有排列,很多人都不能一下子想出解决方案,可以考虑把这个复杂的问题分解成小的问题。把一个字符串看成两部分组成:第一部分为它的第一个字符,第二部分是后面的所有字符。求整个字符串的排列, 看成两步:首先求所有

2020-06-09 09:04:18 40

原创 【剑指Offer】26.二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路在二叉树中,每个结点都有两个指向子结点的指针,在双向链表中,每个结点也有两个指针,分别指向前一个结点和后一个结点。在搜索二叉树中,左子结点的值总是小于父结点的值,右子结点的值总是大于父结点的值。在转换成排序双向链表时,原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子结点的指针调整为链表中指向后一个结点指针。中序遍历树中的每一个结点,把树看成

2020-06-07 22:42:07 25

原创 【剑指Offer】25.复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)Python代码# -*- coding:utf-8 -*-# class RandomListNode:# def __init__(self, x):# self.label = x# self.next

2020-06-06 23:46:08 27

原创 【剑指Offer】24.二叉树中和为某一值的路径

题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路先访问根节点,前序遍历。规律:用前序遍历的方式访问到某一结点,把该结点添加到路径上,并累加该结点的值。如果该结点为叶子结点并且路径中结点值的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。如果当前结点不是叶子结点,则继续访问它的子节点。当前结点访问结束后,递归函数将自动回到它的父结点。在函数退出之前要在路径上删除当前

2020-06-05 20:47:50 42

原创 【剑指Offer】23.二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路后序遍历得到的序列中,最后一个数字是树的根节点的值,数组中前面的数字可以分为两部分:第一部分是左子树的结点的值,都比根节点小;第二部分是右子树结点的值,他们都比根节点的值大。之后用同样的方法确定与数组每一部分对应的子树的结构,一个递归的过程。Python代码# -*- coding:utf-8 -*-class Soluti

2020-06-04 08:53:35 43

原创 【剑指Offer】22.从上往下打印二叉树

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路考察的是树的遍历算法,不太像之前的前序、中序或者后序遍历,这是一种按层遍历的方式。按层遍历:先打印根结点,所以从树的根节点开始分析,为了打印值为8的结点的两个子节点,我们应该在遍历到该结点时把值为6和10的两个结点保存到一个容器里,先取出值为6的结点,打印出值6之后把它的值分别为5和7的两个结点放入数据容器。这个数据容器是队列。找到从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子节

2020-06-03 22:14:44 43

原创 【剑指Offer】21.栈的压入、弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路一个很简单的想法是建立一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从该栈中弹出数字。判断一个序列是不是栈的弹出序列的规律:如果下一个弹出的数

2020-06-03 09:02:13 43

原创 【剑指Offer】20.包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。解题思路第一反应:每次压入一个新元素进栈时,将栈里的所有元素排序,让最小的元素位于栈顶,这样就能在O(1)时间得到最小元素。但是不能保证最后压入栈的元素能够最先出栈,这个数据结构已经不是栈了。在栈里添加一个成员变量存放最小的元素。每次压入一个新元素进栈的时候,如果该元素比当前最小的元素还要小,

2020-06-02 23:02:29 39

原创 【剑指Offer】19.顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。解题思路没有涉及复杂的数据结构或者高级的算法,但是要包含多个循环,还需要判断多个边界条件。需要先把问题考虑清楚,最后才开始写代码。关键点:形成清晰的思路,把复杂的问题分解成若干简单的问题可以用一个循环来打印矩阵,每一次打印矩阵中的一个圈循环结束的条件,假设矩阵的行数是rows,列数是columns,打印第一圈的左上角的坐标是(0,0),第二圈是(1,1),发现左上角的坐标中行和列总是相同的。5*5的矩阵,最后一

2020-06-02 08:57:48 75

原创 【剑指Offer】18.二叉树的镜像

题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像解题思路先在树中交换根节点的两个子结点,之后需要交换着两个结点的左右子结点。先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。Python代码 -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# s

2020-06-01 23:54:22 28

原创 【剑指Offer】17.树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路分为两步:第一步在树A中找到和B的根节点的值一样的结点R,可以用递归来实现第二步再判断树A中以R为根节点的子树是不是包含和树B一样的结构,也是用递归来实现注意点:一定要注意边界条件的检查,即检查空指针。当树A或树B为空的时候,定义相应的输出Python代码# -*- coding:utf-8 -*-# class TreeNode:# def __i

2020-06-01 08:45:29 54

原创 根据书单来制作item2vec

数据和工具1.glove:http://nlp.stanford.edu/projects/glove/2.书单数据:待审核代码# -*- coding: utf-8 -*-from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionfrom __future__ import unicode_literalsimport ..

2020-05-31 10:26:38 94

原创 利用小说制作词云

利用来wordcloud制作小说的词云背景图效果图代码1. 停用词太多,需要过滤掉。2.设置词数,避免太多# coding: utf-8 from wordcloud import WordCloudfrom PIL import Imageimport jiebaimport numpy as np with open('tmp.txt','r',encoding='utf8') as f: text = f.read() cut_..

2020-05-31 10:19:14 174

原创 【剑指Offer】16.合并两个排序的链表

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路最经常犯的错误:写代码之前没有对合并的过程想清楚,最终合并出来的链表要么中间断开了,要么没有做到递增排序 代码在鲁棒性方面存在问题,程序一旦有特殊的输入(如空链表)就会崩溃一个递归的过程,不断比对两个链表的头结点当一个链表是空链表,也就是它的头结点是一个空指针,那么把它和第二个链表合并,合并的结果就是第二个链表同理,第二个链表是头结点是空指针,其实就是第一个链表测试用例

2020-05-31 09:56:05 49

原创 【剑指Offer】15.反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路通过循环,将链表反转代码# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回ListNode def ReverseList(self, pHead): # writ

2020-05-30 23:36:01 51

原创 【剑指Offer】14.链表的倒数第k个节点

题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指针走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。。为了能够只遍历一次就能找到倒数第k个节点,可以定义两个指针:  (1)第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;  (2)从第k步开始,第二个指针也开始从链表的头指针开始遍历;  (3)由于两个指针的距离保

2020-05-30 10:16:50 30

原创 【剑指Offer】13.调整数组的顺序使奇数放在偶数的前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路最简单的方法:从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位。由于每碰到一个偶数就需要移动O(n)个数字,因此总的时间复杂度是O(n^2)。这种方法不能让面试官满意。高效的方法:维护两个指针,第一个指针初始化

2020-05-29 22:45:54 45

原创 【Pyspark】Pyspark的常见命令

常见命令初始化会话 添加本地文件 读取表 过滤数据 看数量 提交到yarnfrom pyspark.sql import SparkSessionfrom pyspark.sql import functions as F# 初始会话spark = SparkSession.builder.appName("test").enableHiveSupport().master("yarn").getOrCreate()sc = spark.sparkContext# 添加Pytho

2020-05-28 23:23:35 127

原创 【剑指Offer】12.数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路这道题考察的看起来很简单的题目,但是需要考虑异常的情况,例如exponent为负数或者base为0代码# -*- coding:utf-8 -*-class Solution: def Power(self, base, exponent): # write code here flag = False

2020-05-28 23:18:00 28

原创 xgboost预测报错: Check failed: offset.back() == value.size()

报错信息1.xgboost.core.XGBoostError: b'[15:53:47] /workspace/dmlc-core/src/data/./row_block.h:177: Check failed: offset.back() == value.size()解决方法需要将特征名转换为索引号:gender——>1,age——>22.expected f532, f535, f534, f533, f536 in input data解决方法..

2020-05-27 23:49:15 215

原创 【剑指Offer】11.二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路先减一然后按位取反,此为一个字节,9转换为二进制就是00001001,减一00001000,按位取反11110111。左移一位,然后与1取与,如果是1&1=1,0&1=0,32位最多,然后求个和代码# -*- coding:utf-8 -*-class Solution: def NumberOf1(self, n): # write code he

2020-05-27 23:45:00 27

原创 【剑指Offer】10.矩形覆盖

题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路逆向分析,因为可以横着放或竖着放,所以f(n)可以是2*(n-1)的矩形加一个竖着放的2*1的矩形或2*(n-2)的矩形加2横着放的,即f(n)=f(n-1)+f(n-2)。当到了最后,f(1)=1,f(2)=2代码# -*- coding:utf-8 -*-class Solution: def rectCover(self,

2020-05-26 23:20:58 31

原创 【剑指Offer】9.变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路假设f(n)是n个台阶跳的次数。f(1) = 1f(2) 会有两个跳得方式,一次1阶或者2阶,这回归到了问题f(1),f(2) = f(2-1) + f(2-2)f(3) 会有三种跳得方式,1阶、2阶、3阶,那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3).因此结论是f(3) = f(3-1)

2020-05-25 22:28:31 26

原创 【剑指Offer】8.跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路对于本题,前提只有 一次 1阶或者2阶的跳法。当n>2时,第一次条的时候就有两种不同的选择:a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)d.然后通过实际的

2020-05-25 08:41:09 22

原创 【推荐系统】Bandit算法原理

问题如果不断有的新的产品需要上线,该如何让新产品得到曝光,并且自适应的降低转化率差产品的曝光数?问题的本质这个问题的本质是如何对新产品做冷启动。bandit算法来源于历史悠久的赌博学,它要解决的问题是这样的:一个赌徒,要去摇老虎机,走进赌场一看,一排老虎机,外表一模一样,但是每个老虎机吐钱的概率可不一样,他不知道每个老虎机吐钱的概率分布是什么,那么每次该选择哪个老虎机可以做到最大化收益呢?这就是多臂赌博机问题(Multi-armed bandit problem, K-armed bandi

2020-05-23 22:11:57 111

原创 【剑指Offer】7.斐波那契数列

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39解题思路通过分析,知道斐波那契第一个是0,第二个是1,第三个是0+1=1,f(n) = f(n-1) + f(n-2)实现,如果用递归,代码简单但是计算量大,很多结点都重复计算。改进方法:递归代码之所以慢的原因是重复的计算太多,想办法避免重复计算,把已经得到的数列中间项保存起来。最简单的是从下往上计算,根据f(0)和f(1)计算出f(2),根据f(1)和f(2)计算出f(3)

2020-05-23 19:45:57 60

原创 【剑指Offer】6.旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路暴力法:从头到尾遍历数组一次,找出最小的元素。时间复杂度是O(n),这个思路没有利用输入的旋转数组的特性。二分查找法:旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的子数组的元素都大于或者

2020-05-23 00:32:42 52

book_02_16.txt

书单,从网上爬取的书单,用于做简单的item_to_vec的向量生成demo 每行一个书单,包含多条数据,用空格分离

2020-05-31

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除