第 370 场 LeetCode 周赛题解

A 找到冠军 I

在这里插入图片描述

枚举求强于其他所有队的队

class Solution {
public:int findChampion(vector<vector<int>> &grid) {int n = grid.size();int res = 0;for (int i = 0; i < n; i++) {int t = 0;for (int j = 0; j < n; j++)if (j != i)t += grid[i][j];if (t == n - 1) {res = i;break;}}return res;}
};

B 找到冠军 II

在这里插入图片描述
在这里插入图片描述

计数:若图中入度为 0 0 0 的点只有一个则该点为冠军,否则返回 − 1 -1 1

class Solution {
public:int findChampion(int n, vector<vector<int>> &edges) {vector<int> indeg(n);for (auto &ei: edges)indeg[ei[1]]++;vector<int> li;for (int i = 0; i < n; i++)if (indeg[i] == 0)li.push_back(i);if (li.size() != 1)return -1;return li[0];}
};

C 在树上执行操作以后得到的最大分数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动态规划:设 p [ c u r ] [ 0 ] p[cur][0] p[cur][0] 为在以 c u r cur cur 为根的子树上执行若干操作使得该子树是健康的 能得到的最大分数,设 p [ c u r ] [ 1 ] p[cur][1] p[cur][1] 为以 c u r cur cur 为根的子树各节点 v a l u e s values values 之和,有状态转移方程: p [ c u r ] [ 0 ] = { 0 , c u r 是叶子节点 m a x { v a l u e s [ c u r ] + ∑ j 是 c u r 的子节点 p [ j ] [ 0 ] , ∑ j 是 c u r 的子节点 p [ j ] [ 1 ] } , c u r 不是叶子节点 p[cur][0]=\left\{\begin{matrix} 0 & ,cur 是叶子节点\\ max\{ values[cur]+\sum_{j 是 cur的子节点} p[j][0],\;\sum_{j 是 cur的子节点} p[j][1] \} &,cur 不是叶子节点 \end{matrix}\right. p[cur][0]={0max{values[cur]+jcur的子节点p[j][0],jcur的子节点p[j][1]},cur是叶子节点,cur不是叶子节点

class Solution {
public:using ll = long long;long long maximumScoreAfterOperations(vector<vector<int>> &edges, vector<int> &values) {int n = edges.size() + 1;vector<int> e[n];for (auto &ei: edges) {e[ei[0]].push_back(ei[1]);e[ei[1]].push_back(ei[0]);}ll p[n][2];memset(p, -1, sizeof(p));//初始化状态function<ll(int, int, int)> get = [&](int cur, int type, int par) {//记忆化搜索if (p[cur][type] != -1)return p[cur][type];if (type == 0) {if (cur != 0 && e[cur].size() == 1)return p[cur][type] = 0;ll r1 = 0, r2 = values[cur];for (auto j: e[cur])if (j != par) {r1 += get(j, 1, cur);r2 += get(j, 0, cur);}return p[cur][type] = max(r1, r2);} else {ll r2 = values[cur];for (auto j: e[cur])if (j != par)r2 += get(j, 1, cur);return p[cur][type] = r2;}};return get(0, 0, 0);}
};

D 平衡子序列的最大和

在这里插入图片描述
在这里插入图片描述

动态规划 + 离散化 + 树状数组:设数组 c [ i ] = n u m s [ i ] − i c[i]=nums[i]-i c[i]=nums[i]i ,则 c c c 数组中非降序子序列的下标序列即为平衡子序列,所有可以对 c c c 数组进行离散化,然后定义状态 p [ i ] p[i] p[i] 为: c c c 数组中末尾元素为 i i i 的非降序子序列对应的平衡子序列在 n u m s nums nums 中的最大和,有状态转移方程: p [ i ] = m a x { n u m s [ i ] m a x { p [ j ] ∣ j ≤ i } + n u m s [ i ] p[i]=max\left\{\begin{matrix} nums[i]\\ max\{p[j] \;|\; j\le i \}+nums[i] \end{matrix}\right. p[i]=max{nums[i]max{p[j]ji}+nums[i] ,通过树状数组实现其中的前缀极值查询和单点更新

class Solution {
public:using ll = long long;int N;vector<ll> a;inline int lowbit(int x) {return x & -x;}void update(int loc, ll val) {// li[loc]=max(li[loc], val);for (; loc < N; loc += lowbit(loc))a[loc] = max(a[loc], val);}ll query(int loc) {// max{li[k] | 1<=k<=loc}ll res = INT64_MIN;for (; loc > 0; loc -= lowbit(loc))res = max(res, a[loc]);return res;}long long maxBalancedSubsequenceSum(vector<int> &nums) {int n = nums.size();vector<int> c(n);for (int i = 0; i < n; i++)c[i] = nums[i] - i;vector<int> t = c;sort(t.begin(), t.end());t.erase(unique(t.begin(), t.end()), t.end());for (int i = 0; i < n; i++)//离散化cc[i] = lower_bound(t.begin(), t.end(), c[i]) - t.begin();N = n + 1;a = vector<ll>(N, INT64_MIN);for (int i = 0; i < n; i++) {ll t1 = query(c[i] + 1);update(c[i] + 1, max(t1, 0LL) + nums[i]);}return query(n);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/162443.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV检测圆(Python版本)

文章目录 示例代码示例结果调参 示例代码 import cv2 import numpy as np# 加载图像 image_path DistanceComparison/test_image/1.png image cv2.imread(image_path, cv2.IMREAD_COLOR)# 将图像转换为灰度 gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用高斯模糊消除…

【Web】在前端中,HTML<meta>标签

<meta>实例 <head><meta name"description" content"免费在线教程"><meta name"keywords" content"HTML,CSS,XML,JAVASCRIPT"><meta name"author" content"runoob"><meta char…

Macroscope安全漏洞检测工具简介

学习目标&#xff1a; 本介绍旨在帮助感兴趣者尽快了解 Macroscope&#xff0c;这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试&#xff1a; 如下图所示&#xff0c;如果使用多种互补工具&#xff08;SAST/DAST/SCA 等&#xff09;来检测应用程序…

Prometheus接入AlterManager配置企业微信告警(基于K8S环境部署)

文章目录 一、创建企业微信机器人二、配置AlterManager告警发送至企业微信三、Prometheus接入AlterManager配置四、部署PrometheusAlterManager(放到一个Pod中)五、测试告警 注意&#xff1a;请基于 PrometheusGrafana监控K8S集群(基于K8S环境部署)文章之上做本次实验。 一、创…

PostgreSQL简介及安装步骤

PostgreSQL简介 PostgreSQL是一款开源的关系型数据库管理系统&#xff0c;具有强大的扩展性、高度的可定制性和可靠的稳定性&#xff0c;因此在企业级应用和开发领域中得到了广泛的应用。本文将介绍PostgreSQL的基本概念以及在各种操作系统上的安装步骤。 安装步骤 1. Window…

Azure 机器学习 - 使用Python SDK训练模型

目录 一、环境准备二、工作区限制三、什么是计算目标&#xff1f;四、本地计算机五、远程虚拟机六、Apache Spark 池七、Azure HDInsight八、Azure Batch九、Azure Databricks十、Azure Data Lake Analytics十一、Azure 容器实例十二、Kubernetes 了解如何用 SDK v1 将 Azure 计…

Python Slice函数:数据处理利器详解

引言&#xff1a; 在Python编程中&#xff0c;处理数据是一个非常常见且重要的任务。为了更高效地处理数据&#xff0c;Python提供了许多内置函数和方法。其中&#xff0c;slice()函数是一个非常强大且常用的工具&#xff0c;它可以帮助我们轻松地提取、操作和处理数据。无论是…

分页存储管理、分段存储管理、段页式存储管理、两级页表

目录: 分页存储管理 基本地址存储机构 具有快表的地址存储机构 两级页表 分段存储管理 段页式管理方式 分页存储管理(重点) 首先回顾,逻辑地址和物理地址. 为什么要引入分页存储管理? 把物理地址下,离散的各个小片都利用起来,也就是在逻辑地址中看似是连续存储的,实际上对应…

【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…

MPLAB X IDE 仿真打断点提示已中断的断点?

这种中间带裂缝的是无效断点。 原因可能与XC编译器的优化有关&#xff0c;最后生成的汇编与C语言并不是一一对应的(官方给的解释是效率高)。所以这一行C语言转换的汇编代码可能并不在这个位置&#xff0c;也可能与其它汇编合并后根本就没有 我的解决方法是把优化等级调到最低&a…

虚拟列表方案实现

虚拟列表 长列表优化的2种思路&#xff1a; 分片渲染只渲染可视区域 基本概念 进程&#xff1a;这个概念比较大。每开一个应用程序都会分配一个独立的进程&#xff0c;等于每个应用都是一个进程(当然也有一个应用有很多进程)&#xff0c;进程是一个更大的概念&#xff0c;一个进…

每天一点python——day61

#第61天 #字符串的驻留机制字符串&#xff1a;python中基本数据类型&#xff0c;是一个不可变的序列【目前我们学了两个&#xff1a;元组、字符串】 可以使用单引号&#xff0c;双引号&#xff0c;三引号来定义#定义字符串 apython#用单引号&#xff0c;双引号&#xff0c;三引…