Day50力扣打卡

2023-12-04 23:04
文章标签 力扣 打卡 day50

本文主要是介绍Day50力扣打卡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

打卡记录

在这里插入图片描述


三个无重叠子数组的最大和

链接

滑动窗口

class Solution:def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:n, ans = len(nums), []sum1 = sum2 = sum3 = 0maxsum1idx, maxsum12idx = 0, ()maxsum1 = maxsum12 = total = 0for i in range(2 * k, n):sum1 += nums[i - 2 * k]sum2 += nums[i - k]sum3 += nums[i]if i >= 3 * k - 1:if sum1 > maxsum1:maxsum1 = sum1maxsum1idx = i - 3 * k + 1if maxsum1 + sum2 > maxsum12:maxsum12 = maxsum1 + sum2maxsum12idx = (maxsum1idx, i - 2 * k + 1)if maxsum12 + sum3 > total:total = maxsum12 + sum3ans = [*maxsum12idx, i - k + 1]sum1 -= nums[i - 3 * k + 1]sum2 -= nums[i - 2 * k + 1]sum3 -= nums[i - k + 1]return ans

动态规划 + 回溯

class Solution:def maxSumOfThreeSubarrays(self, nums, k):n = len(nums)sums = list(accumulate(nums, initial=0))dp = [[0] * 4 for _ in range(n + 10)]for i in range(n - k + 1, 0, -1):for j in range(1, 4):dp[i][j] = max(dp[i + 1][j], dp[i + k][j - 1] + sums[i + k - 1] - sums[i - 1])ans = [0] * 3i, j, idx = 1, 3, 0while j > 0:if dp[i + 1][j] > dp[i + k][j - 1] + sums[i + k - 1] - sums[i - 1]:i += 1else:ans[idx] = i - 1i += kj -= 1idx += 1return ans

T 秒后青蛙的位置(树状DP)

链接

class Solution:def frogPosition(self, n: int, edges: List[List[int]], t: int, target: int) -> float:g = [[] for _ in range(n + 1)]g[1].append(-1)for x, y in edges:g[x].append(y)g[y].append(x)ans = 0def dfs(x, fa, time, k):if x == target and (time == 0 or len(g[x]) == 1):nonlocal ansans = 1 / kreturn Trueif x == target or time == 0:return Falsefor y in g[x]:if y == fa:continueif dfs(y, x, time - 1, k * (len(g[x]) - 1)):return Truedfs(1, -1, t, 1)return ans

树上最大得分和路径(树状DP)

链接

class Solution:def mostProfitablePath(self, edges: List[List[int]], bob: int, amount: List[int]) -> int:n = len(amount)g = [[] for _ in range(n)]g[0] = [-1]for x, y in edges:g[x].append(y)g[y].append(x)Bob_times = [n] * ndef dfs1(x, fa, time):if x == 0:Bob_times[0] = timereturn Truefor y in g[x]:if y == fa:continueif dfs1(y, x, time + 1):Bob_times[x] = timereturn Truereturn Falsedfs1(bob, -1, 0)def dfs2(x, fa, time, score):if time < Bob_times[x]:score += amount[x]elif time == Bob_times[x]:score += amount[x] // 2if len(g[x]) == 1:return scoreres = -inffor y in g[x]:if y == fa:continueres = max(res, dfs2(y, x, time + 1, score))return resreturn dfs2(0, -1, 0, 0)

这篇关于Day50力扣打卡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/455223

相关文章

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

代码随想录打卡Day25

今天一整天都在教研室做实验,没时间刷题,就做了一题,剩下的明天补 491.递增子序列 这道题目和之前的子集问题很像,但是有一点要注意的,这个输入的数组不能进行排序,所以就不能沿用之前的去重逻辑,这道题要去重还是得借助额外的变量来维护元素使用情况,但是这题的used为集合,且不能为全局变量,只能为树层遍历前定义的一个局部变量,除了这个改动以外,其他地方都是高度相似的。 class Soluti

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

力扣接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1

T1打卡——mnist手写数字识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 1.定义GPU import tensorflow as tfgpus=tf.config.list_physical_devices("GPU")if gpus:gpu0=gpus[0]tf.config.experimental.set_memort_groth(gpu0,True) #设置GPU现存用量按需

【代码随想录训练营第42期 续Day52打卡 - 图论Part3 - 卡码网 103. 水流问题 104. 建造最大岛屿

目录 一、做题心得 二、题目与题解 题目一:卡码网 103. 水流问题 题目链接 题解:DFS 题目二:卡码网 104. 建造最大岛屿 题目链接 题解:DFS  三、小结 一、做题心得 也是成功补上昨天的打卡了。 这里继续图论章节,还是选择使用 DFS 来解决这类搜索问题(单纯因为我更熟悉 DFS 一点),今天补卡的是水流问题和岛屿问题。个人感觉这一章节题对于刚

力扣 797. 所有可能路径【DFS】

1. 题目 2. 代码 DFS , 直接见代码 class Solution {public:vector<int> path;vector<vector<int>> res; // 结果集void dfs(vector<vector<int>>& graph, int cur, int n){// 找出所有从节点 0 到节点 n-1 的路径// 下标从 0 开始的if (