- 博客(14)
- 收藏
- 关注
原创 剪绳子
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入一个数n,意义见题面。(2 <= n <= 60)【1】动态规划,自下而上递归f(n) = max{f(1)*f(n-1), f(2)*f(n-2),…,f(n/2)*f(n-n/2)},n=1
2020-08-06 08:54:07
68
原创 二进制中1的个数
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。机器码/机器数:机器数是带符号的, 计算机字长为8位,转换成二进制就是00000011;-3 ,就是 10000011。这里的 00000011 和 10000011 就是机器数。真值:因为第一位是符号位,所以机器数的形式值就不等于真正的数值。为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1原码:原码就
2020-08-06 08:53:19
106
原创 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。【1】二分查找先判断第一个值是不是大于最后一个值?若是,则有序,直接返回第一个值;若不是,else:指针p指向位置0,指针q指向位置n,指针i指向中间位置 (q+p)/2 向下取整若i值大于p值,说明i在前一段,要找的数在i后
2020-08-06 08:52:05
63
原创 矩形覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法本质上同斐波那契数列问题【1】自下而上循环# -*- coding:utf-8 -*-class Solution: def rectCover(self, number): # write code here re = [0,1,2] while len(re)<
2020-08-06 08:51:09
89
原创 变态青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。设f[i] 表示 当前跳道第 i 个台阶的方法数。那么f[n]就是所求答案。假设现在已经跳到了第 n 个台阶,那么前一步可以从哪些台阶到达呢?如果上一步跳 1 步到达第 n 个台阶,说明上一步在第 n-1 个台阶。已知跳到第n-1个台阶的方法数为f[n-1]如果上一步跳 2 步到达
2020-08-05 21:21:27
156
原创 斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。【1】递归,重复计算太多,时间复杂度是n的指数级,超过题目给定的时间# -*- coding:utf-8 -*-class Solution: def Fibonacci(self, n): # write code here if n == 0: return 0 elif n == 1:
2020-08-05 21:19:48
64
原创 用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。[1]入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;如果不为空,栈B直接出栈。# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node):
2020-08-05 21:19:01
59
原创 二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。[1]如果给定的结点有右子树,那么这个结点的下一个结点就是它的右子树的最左子结点[2]如果给定的结点没有右子树,且该结点是它的父结点的左子结点,那么该结点的下一个结点是就是它的父节点[3]如果给定的结点既没有右子树,而且还是它的父
2020-08-05 21:18:16
69
原创 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。**[1]**递归终止条件很重要# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None
2020-08-05 21:17:36
66
原创 从尾到头打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。[1] 利用栈的后进先出python中没有stack这个结构,但是可以使用list作为stack使用: listA.append() 和 listA.pop()class Solution: # (⊙﹏⊙)这个超出限制内存 # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code here
2020-08-05 21:16:58
63
原创 替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。**[1]**哈哈哈,搞笑,python牛逼return s.replace(' ','%20')[2] 从后往前copy or replace+copy使用两个指针p,q,p是原字符串尾指针,q是新字符串尾指针# -*- coding:utf-8 -*-class Solution: # s 源字符串 def repla
2020-08-05 21:16:14
97
原创 二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。【1】二分查找从左上角或右下角位置上的数与target比较,删除行或列选择右上角,大于target删除这一列;小于target删除这一行选择左下角,大于target删除这一行;小于target删除这一列时间复杂度O(n+m),空间复杂度O(1)python的list没有length()或shape(),需要
2020-08-05 21:15:23
83
原创 数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。【1】使用字典记录出现次数from collections import OrderedDictclass Solution: # 这里要特别注意~找到任意重复的一个值并赋值到duplication[0] # 函数返回Tru
2020-08-05 21:14:18
80
原创 第一个只出现一次的字符
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)使用python内置函数:class Solution: def FirstNotRepeatingChar(self, s): if not s: return -1 try: s = s.strip() for i
2020-08-05 20:51:35
79
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人