- 博客(27)
- 收藏
- 关注
原创 Leecode413等差数列划分-动态规划详细算法思路
这个做法的时间复杂度是 O(n^2) 的,即枚举最后两项的时间复杂度为 O(n)O(n),使用指针 jj 遍历的时间复杂度也为 O(n)O(n),相乘得到总时间复杂度 O(n^2)对于一些运行较慢的语言,该方法可能会超出时间限制,因此我们需要进行优化。如果 nums[i]−nums[i+1]=d,那么在这一轮遍历中,j 会遍历到与上一轮相同的位置,答案增加的次数相同,并且额外多出了nums[i−1],nums[i],nums[i+1] 这一个等差数列,因此有:t_{i+1} = t_i + 1。
2022-10-25 17:06:32 169
原创 Leecode19.删除链表的倒数第N个节点-双指针详细思路及解题
双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。输入:head = [1,2,3,4,5], n = 2。fast和slow同时移动,直到fast指向末尾,如题。输入:head = [1,2], n = 1。输入:head = [1], n = 1。思路是这样的,但要注意一些细节。输出:[1,2,3,5]
2022-10-25 17:04:48 80
原创 Leecode64.最小路径和-动态规划详细思路及题解
给定一个包含非负整数的*m* x *n*网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。**说明:**每次只能向下或者向右移动一步。
2022-10-25 16:58:13 146
原创 Leecode27. 移除元素-双指针详细算法思路
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。
2022-10-22 21:53:08 144
原创 Leecode518.零钱兑换Ⅱ动态规划之完全背包详细算法思路
输入: amount = 5, coins = [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 5=5 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1。dp[j] (考虑coins[i]的组合总和) 就是所有的dp[j - coins[i]](不考虑coins[i])相加。下标非0的dp[j]初始化为0,这样累计加dp[j - coins[i]]的时候才不会影响真正的dp[j]背包容量的每一个值,都是经过 1 和 5 的计算,包含了{1, 5} 和 {5, 1}两种情况。
2022-10-20 20:59:13 230
原创 Leecode474.一和零 动态规划之01背包详细算法思路
最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4。示例 2: 输入:strs = [“10”, “0”, “1”], m = 1, n = 1 输出:2 解释:最大的子集是 {“0”, “1”} ,所以答案是 2。输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3 输出:4。以输入:[“10”,“0001”,“111001”,“1”,“0”],m = 3,n = 3为例。
2022-10-20 20:49:50 124
原创 Leecode1049.最后一块石头的重量-动态规划详细题解及算法思路
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x
2022-10-20 16:43:48 571
原创 Leecode1014.最佳观光组合 详细题解及算法思路
题目:一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,那么得分取决与 values[i]+i与values[j]-j的和,解释:i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11。确定dp数组的定义:该位置的values[i]+i的值。输入:values = [8,1,5,2,6]输入:values = [1,2]找出dp数组的递推公式。
2022-10-18 20:23:03 144
原创 Leecode1567.乘积为正数的最长子数组长度详细题解及算法思路
判断的情况比较复杂,可以跳出往常思维,使用两个dp数组,分别记录前i-1乘积为正数,前i-1成绩为负数的情况,可以发现,nums[i]可以大于0,也可以小于0,也可以等于0, 那么需要判断的情况就比较复杂,解释:乘积为正数的最长子数组是 [-1,-2] 或者 [-2,-3]。解释:最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6。,那么这样就需要优化dp数组了,如果不了解,可以参考--------输入:nums = [0,1,-2,-3,-4]输入:nums = [-1,-2,-3,0,1]
2022-10-18 19:37:02 218
原创 PAT乙级1001(解题思路)
对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?执行一次,计数器加一次,到1为止,输出结果,这道题就完事了。
2022-09-19 14:53:26 56
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人