leetcode刷题总结
我只刷简单基础题,中等和困难的感觉不会、我尽量努力理解。
Tony Einstein
人生苦短,我用Python。记录生活,记录成长,天道酬勤,佛系更新。
做一个会思考、会解决问题的思考者!希望得到你的关注、点赞、收藏!
展开
-
剑指 Offer 10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100解题思路:设跳上 nn 级台阶有 f(n)种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。当翻译 2020-10-30 23:38:33 · 82 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列【DP】
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5 提示:0 &翻译 2020-10-30 22:01:42 · 272 阅读 · 0 评论 -
连续子数组的最大值-力扣-python3
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。动态规划解法:class Solution: def maxSubArray(self, nums: List[int]) -> int: dp = [0]*len(nums) dp[0],max_sum = nums[0],nums[0] for i in range(1,len(nums)): dp[转载 2020-09-09 10:55:23 · 256 阅读 · 0 评论 -
排序算法:排序三剑客之【希尔、归并、快速】
一、希尔排序希尔排序需要使用一个增量排序,因为每趟的排序间隔逐渐缩小,希尔排序也称为“缩小增量排序”。这个算法可以看作是插入排序的优化版,因为插入排序需要一位一位比较,然后放置到正确位置。为了提升比较的跨度,希尔排序将数组按照一定步长分成几个子数组进行排序,通过逐渐减短步长来完成最终排序。该方法实质上是一种分组插入方法。尔排序的想法是避免大量的数据移动,先比较那些离的比较远的元素,再比较那些离的比较近的元素,以此类推,逐步逼近基本的插入排序。增量数列的选择对希尔排序的性能有着极大的影响。[Mark转载 2020-08-26 21:51:53 · 248 阅读 · 0 评论 -
最通俗易懂的算法案例解释:排序算法之堆排序
从小到大排序: 构造小顶堆从大到小排序: 构造大顶堆【注意:只比较和交换相邻的元素】案例:对以下数据进行堆排序:【从大到小排序】19 97 01 08 09 17答:把原数据看成一个二叉树:自底向上一层一层扫描,将节点与左右节点进行比较大小,把大的往上交换第一步:01与17比较:并交换第二步:97、与 08、 09比较:不需要交换第三步:19 与 97 、17 进行比较:19 < 97所以两个互换第四部:取数据:取出97,然后把最末尾的移动到根节点位置(即最顶部.转载 2020-08-26 19:36:28 · 196 阅读 · 0 评论 -
最通俗易懂的算法案例解释:排序算法之插入排序
插入排序的基本思想是: 将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。这样的话,n个元素需要进行n-1趟排序!!!也可以这样说:将一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。当然,插入过程中涉及到了元素的移动。举个转载 2020-08-26 18:24:16 · 279 阅读 · 0 评论 -
算法案例解释:排序算法之选择排序
1、算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。2、算法过程举个栗子(第一趟的排序过程)原始序列:49、38、65、97、76、13、27、491)在进行选择排序过程中分成有序和无序两个部分,开始都是无序序列结果:49、38、65、97、76、13、27、492)从无序序列中取出最小的元素13,将13同无序序列第一个元素交换,此时产生仅含一个元素的有序序列,无序序列减一结果:{13、} {38、转载 2020-08-26 18:16:52 · 489 阅读 · 0 评论 -
剪绳子-剑指offer-python
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。(2 <= n <= 60)解题:4 : 225 : 236 : 337 : 223 或者438 : 2339 : 33310:2233 或者43311:233312:3转载 2020-07-24 18:34:23 · 124 阅读 · 0 评论 -
初级算法-数组-题目2
**题目2:**给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。示例1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 ...原创 2019-10-01 19:41:36 · 151 阅读 · 0 评论 -
初级算法-数组-题目1-去重
题目1:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出...原创 2019-10-01 19:36:58 · 231 阅读 · 0 评论