![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
sa726663676
这个作者很懒,什么都没留下…
展开
-
牛客题霸:子数组最大乘积
题目描述给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。示例1输入[-2.5,4,0,3,0.5,8,-1]返回值12.00000动态规划算法:一看本题目知识点是动态规划dp[i] = dp[i-1]的一系列操作但是发现未果,因为是连续的子树组,所以最小值也可能摇身一变把歌唱,成为最大值所以可以定义一个imax imin,来分别遍历最大值和最小值.dp公式: 1 2 imax .原创 2021-02-23 14:38:45 · 147 阅读 · 0 评论 -
牛客题霸:集合的所有子集
题目描述现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按升序排列给出的解集中不能出现重复的元素示例1输入[1,2,3]返回值[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]解法:生产所有自己然后排序:def subsets(A): if not A: return [] res = [[]] for i in A: res += [arr+[i..原创 2021-02-21 20:52:58 · 309 阅读 · 0 评论 -
剑指offer:最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。示例1输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]思路:使用堆排序实现解法1:自己构建堆解法2:使用python内置的sorted函数实现:sorted函数是不稳定的排序方法# -*- coding:utf-8 -*-class Solution: def GetLeastNumb...原创 2021-02-21 17:45:57 · 62 阅读 · 0 评论 -
剑指offer:求1+2+3+...+n
题目:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。先给自己普及大佬们口中的短路求值是什么。作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值(short-circuit evaluation)。假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:...原创 2021-02-21 16:54:17 · 85 阅读 · 0 评论 -
剑指offer24:二叉树中和为某一值的路径
题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。示例1输入{10,5,12,4,7},22返回值[[10,5,7],[10,12]]思路:使用带追溯路径的递归方法。 需要用到两个变量,一个变量用于追溯递归路径,一个变量用于记录满足条件的所有结果。1.通过一个共享列表的pop和append的实现。优点:所有递归的栈都使用同一个列表可以减少内存消耗...原创 2021-02-21 00:03:38 · 102 阅读 · 0 评论 -
剑指offer:连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)思路动态规划F(i):以array[i]为末尾元素原创 2021-02-18 16:24:07 · 58 阅读 · 0 评论 -
剑指offer:丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路1首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们从1开始乘以2,3,5,就得到2,3,5三个丑数,在从这三个丑数出发乘以2,3,5就得到4,6,10,6,9,15,转载 2021-02-18 15:54:34 · 65 阅读 · 0 评论 -
剑指offer:斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39思路1裴波那契数列:F(0)=0,F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2),根据数列特点,可以利用递归,但是递归在牛客上通过不了,显示超时。代码-*- coding:utf-8 -*-class Solution: def Fibonacci(self, n): # write code here原创 2021-02-18 14:59:59 · 94 阅读 · 0 评论 -
剑指offer:跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路这是裴波那契数列的一个应用。由于青蛙可以跳1阶或2阶台阶时。因此,可以分两种情况:当青蛙第一次跳1阶台阶时,跳n阶台阶就等于跳n-1阶台阶;当青蛙第一次跳2阶台阶时,跳n阶台阶就等于跳n-2阶台阶。同样,可以利用递归和动态规划。代码(动态规划)# -*- coding:utf-8 -*-class Solution: def jumpFloor(s转载 2021-02-18 14:48:22 · 61 阅读 · 0 评论 -
剑指offer:二进制中1的个数
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路这还是一个裴波那契数列的应用题。第一步矩形覆盖时可以有两种覆盖方法,即横着放和竖着放,当竖着放的时候,接下来就相当于覆盖2n-1的大矩形;当横着放的时候,就相当于覆盖2n-2的大矩形。横着放:竖着放:因此可以借助裴波那契数列来做。代码# -*- coding:utf-8 -*-class Solution: def rectCover(转载 2021-02-18 14:30:19 · 70 阅读 · 0 评论 -
剑指offer:剪绳子(动态规划和贪心)
1. 题目描述给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1]…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。2. 思路2.1 动态规划动态规划,先自上而下分析,在长度为n的绳子所求为f(n),剪下一刀后剩下的两段长度是i和n-i,在这个上面还可能继续减(子问题),所以:然后自下而上的解决问题,可以从f(1转载 2021-02-18 13:55:21 · 124 阅读 · 0 评论