LeetCode 第 425 场周赛 个人题解

server/2024/11/26 1:59:09/

Q1. 最小正和子数组

原题链接

Q1. 最小正和子数组

思路分析

签到题,暴力就行

时间复杂度:O(N^2)

AC代码
class Solution:def minimumSumSubarray(self, nums: List[int], l: int, r: int) -> int:n = len(nums)res = -1acc = list(accumulate(nums, initial=0))for i in range(n):for j in range(i + l - 1, min(n, i + r)):if  acc[j + 1] - acc[i] > 0:if res == -1:res = acc[j + 1] - acc[i]else:res = min(res, acc[j + 1] - acc[i])return res

Q2. 重排子字符串以形成目标字符串

原题链接

Q2. 重排子字符串以形成目标字符串

思路分析

存一下s中每个块的数目和t的每个块比对下数量够不够

时间复杂度:O(N)

AC代码
class Solution:def isPossibleToRearrange(self, s: str, t: str, k: int) -> bool:cnt = Counter()n, m = len(s), len(t)if n % k: return FalseB = n // kfor i in range(0, n, B):cnt[s[i:i+B]] += 1for i in range(0, m, B):if cnt[t[i:i+B]] == 0:return Falsecnt[t[i:i+B]] -= 1return True

Q3. 最小数组和

原题链接

Q3. 最小数组和

思路分析

很典的dp

f(i, j, k) 为 [i, n - 1] 剩余 j 次 操作1,k次操作2的最小数组和

枚举当前的方案进行转移即可

时间复杂度:O(N OP1 OP 2)

AC代码
class Solution:def minArraySum(self, nums: List[int], v: int, op1: int, op2: int) -> int:n = len(nums)@cachedef dfs(i: int, j: int, k: int):if i == n: return 0res = nums[i] + dfs(i + 1, j, k)if j:res = min(res, (nums[i] + 1) // 2 + dfs(i + 1, j - 1, k))if k and nums[i] >= v:res = min(res, nums[i] - v + dfs(i + 1, j, k - 1))if j and k and nums[i] >= v:t = (nums[i] - v + 1) // 2if (nums[i] + 1) // 2 >= v:t = min(t, (nums[i] + 1) // 2 - v)res = min(res, t + dfs(i + 1, j - 1, k - 1))return resres = dfs(0, op1, op2)dfs.cache_clear()return res

Q4. 移除边之后的权重最大和

原题链接

Q4. 移除边之后的权重最大和

思路分析

树形dp + 贪心

每个边选或不选,容易想到树上背包

但是这个数据量,显然会炸掉,尝试优化

定义 f(u, lim) 为 u 所在子树最大合法化值,lim = true 说明<p, u> 的边被父节点拿掉了,否则没拿掉

所以 u 能够保存的边数目为 min(k - lim, adj[u] - 1)

我们假设 u 往下伸的所有边 都不拿,然后贪心的考虑拿谁

一条边 <u, v> 从不拿到拿的变化花费:f(v, true) + w - f(v, false)

即,按照f(v, true) + w - f(v, false) 从大到小拿即可

时间复杂度:O(nlogm)

AC代码
class Solution:def maximizeSumOfWeights(self, edges: List[List[int]], k: int) -> int:n = len(edges) + 1adj = [[] for _ in range(n)]for (u, v, w) in edges:adj[u].append([v, w])adj[v].append([u, w])@cachedef dfs(u: int, p: int, lim: bool) -> int:t = k - limh = []res = 0for (v, w) in adj[u]:if v == p: continuea = dfs(v, u, False)b = w + dfs(v, u, True)h.append(b - a)res += ah.sort(reverse=True)for i in range(min(t, len(h))):if h[i] <= 0: breakres += h[i]return resreturn dfs(0, -1, False)


http://www.ppmy.cn/server/144950.html

相关文章

logstash 解析数组格式json数据:split, json

1&#xff0c;需求说明 原始数据格式&#xff1a; 1条 &#xff08;2*2&#xff09;》4个指标数据 [{"app":"aa","url":"www.1.com","metrics":[{"name":"cpu","value":11},{"name&quo…

我用豆包MarsCode IDE 做了一个 CSS 权重小组件

作者&#xff1a;夕水 查看效果 作为一个前端开发者&#xff0c;应该基本都会用 VSCode 来做开发&#xff0c;所以也应该见过如下这张图的效果: 以上悬浮面板分为2个部分展示内容。 <element class"hljs-attr">: 代表元素只有一个类名叫hljs-attr的类选择器&am…

Java基础-组件及事件处理(下)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 面板组件 说明 常见组件 JScrollPane常用构造方法 JScrollPane设置面板滚动策略的方法 JScrollPane滚…

selinux及防火墙

selinux说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 httpd进程标签&#xff08;/usr/share/nginx/html &#…

Java基础-组件及事件处理(中)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 BorderLayout布局管理器 说明&#xff1a; 示例&#xff1a; FlowLayout布局管理器 说明&#xff1a; …

数据结构哈希表-(开放地址法+二次探测法解决哈希冲突)(创建+删除+插入)+(C语言代码)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define M 20 #define NULLDEL -1 #define DELDEY -2typedef struct {int key;int count; }HashTable;//创建和插入 void Insert(HashTable ha[], int m, int p, int key) {int i, HO, HI;HO key…

ubuntu增加swap交换空间

论坛_开发者_技术论坛_鲲鹏_昇腾_华为 先关闭 &#xff0c;否则报错 fallocate: fallocate 失败: 文本文件忙 sudo swapoff /swapfile sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo vim /etc/fstab 添加…

【案例】泛微.齐业成助力北京中远大昌汽车实现数电票全流程管理

中远大昌统一发票共享平台上线三个多月以来&#xff0c;实现&#xff1a; 5000份 60000元 发票开具 成本节约 客户简介及需求分析 北京中远大昌汽车服务有限公司&#xff08;以下简称“中远大昌”&#xff09;成立于2002年&#xff0c;是中远海运集团所属香远&#xff08;北…