![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
牛客网剑桥offer
bboysky45
一个没有感情的量化研究员
展开
-
丑数
题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路丑数的定义是1或者因子只有2,3,5,so,丑数=丑数*丑数。接着可以把丑数的有序序列分为三类:1.包含2的有序丑数序列2.包含3的有序丑数序列3.包含5的有序丑数序列使用...原创 2018-07-17 09:24:54 · 194 阅读 · 0 评论 -
把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:emmmmm承认我菜啊,这道题想了好久好久才懂按拼接次序进行排序得到的数字串变成str后数字是最小的,这句话啥意思?就是两两互相拼接找大小的排序,比如‘23’和‘32’拼接,拼接后有2332...原创 2018-07-20 22:04:27 · 151 阅读 · 0 评论 -
剑指offer 数字在排序数组中出现的次数
题目描述:统计一个数字在排序数组中出现的次数。思路:遍历元素,若存在,则加1class Solution: def GetNumberOfk(self,data,k): num = len(data) j = 0 for i in range(num): if data[i] == k: ...原创 2018-07-21 14:29:30 · 99 阅读 · 0 评论 -
剑指offer 数组中只出现一次的数字
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。思路:这道题好奇怪,之前做出来了,后来怎么看怎么都不能理解之前为啥那么做,换种简单的做法class Solution: def FindNumsAppearOnce(self, array): result = [] array_set ...原创 2018-07-21 14:52:15 · 213 阅读 · 0 评论 -
剑指offer 数组中重复的数字
题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路:因为是要第一个重复的数字,所以先把读取的元素都存到列表,如果有出现重复,则停止读取,返回该数字cla...原创 2018-07-21 15:04:35 · 177 阅读 · 0 评论 -
剑指offer 树的子结构
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:递归class Tree: def __init__(self,x): self.val = x self.left = None self.right = None def is_subtree(self,A,...原创 2018-07-26 16:26:51 · 108 阅读 · 0 评论 -
剑指offer 从上往下打印二叉树
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:把第一个节点root保存在q里面,然后然后弹出来给t,用t判断有木有左节点,有的话写进q,接着判断右结点,写进q,每一次的q弹出第一个元素给L直到结束class TreeNode: def __init__(self, x): self.val = x self.left...原创 2018-07-26 16:35:07 · 115 阅读 · 0 评论 -
剑指offer 替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:这个就直接replace就行了class Solution: def replaceSpace(self,s): s.replace(" ","%20") ...原创 2018-07-22 22:04:45 · 131 阅读 · 0 评论 -
剑指offer 从尾到头打印链表
题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。思路:先把链表写进list中,然后list[::-1],从尾往头读取class ListNode: def__init__(self,x): self.val = x self.next = Noneclass Solution: def printlist...原创 2018-07-22 22:16:15 · 87 阅读 · 0 评论 -
剑指offer 包含min函数的栈
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路:定义两个栈,一个正常的,一个是min_stack,每一次的压栈都把值与min_stack的[-1]进行判断,如果比他小,就append进去class Solution: def __init__(self): self.stack = []...原创 2018-08-14 16:12:55 · 122 阅读 · 0 评论 -
剑指offer 顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:顺时针取列表数据,其实就是每一行取一次,因为每一行就一个列表。每一次取完数据之后就,transpo...原创 2018-08-14 17:02:49 · 110 阅读 · 0 评论 -
剑指offer 数组中出现次数超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:这个可以使用collections中的Counters这个函数,会以字典的形式返回每一个数的个数import collections:class Solu...原创 2018-08-15 09:23:12 · 121 阅读 · 0 评论 -
剑指offer 最小的k个数
题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:注意k>len(n)的情况和输入为空的情况,接着用sorted排序然后取前k个class Solution: def GetLeastNumbers_Solution(self, tinput, k): if t...原创 2018-08-17 14:21:14 · 115 阅读 · 0 评论 -
剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)
题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。思路:这个就很骚,把number全都合成一个str,然后使用nu...原创 2018-08-17 14:33:51 · 157 阅读 · 0 评论 -
剑指offer 两个链表的第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共结点。思路:先新建一个列表存链表1,遍历链表2,判断每一个链表2的元素是否在里面class ListNode: def __init__(self,x): self.val = x self.next = Noneclass Solution: def FindFirstCommonNo...原创 2018-08-17 15:07:35 · 150 阅读 · 0 评论 -
剑指offer 二叉树的镜像
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...原创 2018-07-26 01:24:03 · 152 阅读 · 0 评论 -
剑指offer 合并两个排序的链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:递归方法,直接代码的,没啥好说的额class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def Merge(s...原创 2018-07-26 01:09:01 · 123 阅读 · 0 评论 -
剑指offer 反转链表
题目描述:输入一个链表,反转链表后,输出新链表的表头。思路:设置一个tmp保存head.next,然后每次把head.next往前移了之后就把head.next指向前面的class ListNode: def __init__(self,x): self.val = x self.next = Noneclass Solution:...原创 2018-07-26 00:51:33 · 147 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。解题思路:将1~n的所有数字转化成str然后把所有的str合成一个str找出这个str中1的个数cl...原创 2018-07-17 09:36:41 · 140 阅读 · 0 评论 -
第一个只出现一次的字符
题目要求:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置思路:1.用set去除掉重复的,找出字符串共有几个不同的字符2.使用count找到仅出现过一次的字符,并获取索引3.返回最小的索引# -*- coding:utf-8 -*-class Solution: def FirstNotRepeat...原创 2018-07-17 09:55:53 · 63 阅读 · 0 评论 -
剑指offer 跳台阶问题
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路:只有1阶台阶的时候,有一种跳法,2阶台阶,有2种跳法。当大于两阶台阶之后,把n级台阶时的跳法看成是n的函数,记为f(n),当n>2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f...原创 2018-07-23 14:20:44 · 198 阅读 · 0 评论 -
剑指offer 斐波那契数列(从0开始)
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39思路:先把n = 0,1,2,这三个项确定了再使用递归class Solution: def Fibonacci(self,n): if n == 0: return 0 if n == 1...原创 2018-07-23 14:33:53 · 1252 阅读 · 0 评论 -
剑指offer 用两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:压栈时候写入stack1,接着使用pop()从后往前弹出stack1元素,依次把元素写入stack2,最后再使用pop弹出stack1 = [1,2,3,4,5] pop = 5,4,3,2,1stack2 = [5,4,3,2,1] pop = 1,2,3,4,5clas...原创 2018-07-23 14:51:39 · 106 阅读 · 0 评论 -
剑指offer 变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:当前台阶的跳法种数 = 当前台阶之前的所有台阶的跳法之和 意思就是假设现在有n阶,可以跳完n阶的情况分别是:一次跳完F(0);先跳一步F(1),后面还有F(n-1)种跳法;或者先跳两步F(2),后面还有F(n-2)种跳法。依次类推,第一次跳出n阶后,后面还...原创 2018-07-23 15:09:31 · 102 阅读 · 0 评论 -
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:因为是二维数组所以直接判断第一行有木有目标数接着判断第二行有木有目标数,使用eval(raw.input())输入target和二维数组class Solution: ...原创 2018-07-18 09:56:15 · 7722 阅读 · 0 评论 -
旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:先判断只有0和1个元素的情况,大于2个元素的通过遍历找到最小元素class Solutio...原创 2018-07-18 10:12:51 · 108 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:用两个数组,一个保存奇数,一个保存偶数,最后合在一起class Solution: def reOrderArray(self,array): array1 = [] ...原创 2018-07-18 10:33:06 · 90 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:使用python 的collections package 的collections.Counter方法import collectionsclass So...原创 2018-07-18 12:31:23 · 117 阅读 · 0 评论 -
剑桥offer(数组类)连续子数组的最大和
题目描述:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)思路:把数组里的元素相...原创 2018-07-18 15:12:39 · 110 阅读 · 0 评论 -
剑指offer 链表中倒数第k个结点
题目描述:输入一个链表,输出该链表中倒数第k个结点。思路:先写进list,然后list[-k],注意判断 k 的值是否大于len(list)或者小于 1class ListNode: def __init__(self,x): self.val = x self.next = Noneclass Solution: def Fin...原创 2018-07-24 14:32:12 · 125 阅读 · 0 评论 -
剑指offer 矩形覆盖
题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路:当n=1时,记作F(1), 共有1种方法;当n=2时,记作F(2), 共有两种方法;当n=3时,记作F(3), 分为两种情况:第一次用一个矩形竖着覆盖(左图蓝色),则剩下共有F(n-1)种方法,即F(2) 种方法;第一次用一个矩...转载 2018-07-24 14:49:00 · 367 阅读 · 0 评论 -
剑指offer 数值的整数次方
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路:需要先判断 等于0和等于1等特殊情况的值,另外需要加入flag变量确定exponent是否为负数,负数的话结果需要取倒数class Solution: def Power(self,base,exponent): flag = 0...原创 2018-07-24 15:03:32 · 118 阅读 · 0 评论 -
排序算法
1.冒泡排序步骤遍历列表并比较相邻的元素对。如果元素顺序错误,则交换它们。重复遍历列表未排序部分的元素,直到完成列表排序。因为冒泡排序重复地通过列表的未排序部分,所以它具有最坏的情况复杂度O(n^2)。def bubble_sort(arr): def swap(i,j): arr[i],arr[j] = arr[j],arr[i] n = le...转载 2019-01-07 14:22:58 · 119 阅读 · 0 评论