当前位置: 首页 > news >正文

Leetcode 第 397 场周赛题解

Leetcode 第 397 场周赛题解

  • Leetcode 第 397 场周赛题解
    • 题目1:3146. 两个字符串的排列差
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3148. 矩阵中的最大得分
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3149. 找出分数最低的排列
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 397 场周赛题解

题目1:3146. 两个字符串的排列差

思路

模拟。

因为每个字符串中的字符都不重复,所以用一个哈希表统计字符串 s 中字符和下标,再遍历字符串 t 计算每个字符在两个字符串中位置的绝对差值之和。

代码

class Solution
{
public:int findPermutationDifference(string s, string t){int n = s.length();int diff = 0;unordered_map<char, int> idx;for (int i = 0; i < n; i++)idx[s[i]] = i;for (int i = 0; i < n; i++)diff += abs(i - idx[t[i]]);return diff;}
};

复杂度分析

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(n),其中 n 是字符串 s 的长度。

题目2:

思路

外层循环枚举魔法师序列的末端,内层循环从魔法师序列的末端开始,往前间隔 k 累加求和。

因为有些魔法师可能会给你负能量,所以每累加一次能量,就要更新答案的最大值。

最后返回答案。

代码

class Solution
{
public:int maximumEnergy(vector<int> &energy, int k){int n = energy.size();int ans = INT_MIN;for (int i = n - k; i < n; i++){int sum = 0;for (int j = i; j >= 0; j -= k){sum += energy[j];ans = max(ans, sum);}}return ans;}
};

复杂度分析

时间复杂度:O(n),其中 n 为数组 energy 的长度。

空间复杂度:O(1)。

题目3:3148. 矩阵中的最大得分

思路

动态规划。

设经过的方格为 c1, c2, ⋯ , ck,那么得分为 (c2−c1)+(c3−c2)+⋯+(ck−ck−1)=ck−c1,也就是说得分只和路径上第一个方格以及最后一个方格有关。

因此问题变为:给一个矩阵,每次可以往右或往下走,求终点值-起点值的最大值。

设 dp[i][j] 表示以 (i,j) 为终点,起点的最小值,它显然是 dp[i - 1][j]、dp[i][j - 1]、grid[i][j] 三者的最小值,转移方程为:dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), grid[i][j])。

遍历 grid,每次先求以 (i,j) 为终点,起点的最小值 minGrid = min(dp[i - 1][j], dp[i][j - 1]),然后计算终点值-起点值的最大值 ans = max(ans, grid[i][j] - minGrid),最后更新 dp[i][j] = min(grid[i][j], minGrid)。

最后返回 ans。

代码

/** @lc app=leetcode.cn id=3148 lang=cpp** [3148] 矩阵中的最大得分*/// @lc code=start
class Solution
{
public:int maxScore(vector<vector<int>> &grid){int m = grid.size(), n = m ? grid[0].size() : 0;// dp[i][j] 表示以 (i,j) 为终点,起点的最小值int dp[m][n];memset(dp, INT_MAX, sizeof(dp));int ans = INT_MIN;// 状态转移for (int i = 0; i < m; i++)for (int j = 0; j < n; j++){int minGrid = INT_MAX;if (i > 0)minGrid = min(minGrid, dp[i - 1][j]);if (j > 0)minGrid = min(minGrid, dp[i][j - 1]);ans = max(ans, grid[i][j] - minGrid);dp[i][j] = min(grid[i][j], minGrid);}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(m*n),其中 m 和 n 分别是矩阵 grid 的行数和列数。

空间复杂度:O(m*n),其中 m 和 n 分别是矩阵 grid 的行数和列数。

题目4:3149. 找出分数最低的排列

思路

状压 DP。

题解:状压 DP:从记忆化搜索到递推(Python/Java/C++/Go)

代码

/** @lc app=leetcode.cn id=3149 lang=cpp** [3149] 找出分数最低的排列*/// @lc code=start
class Solution
{
public:vector<int> findPermutation(vector<int> &nums){int n = nums.size();vector<vector<int>> memo(1 << n, vector<int>(n, -1)); // -1 表示没有计算过// s 表示前面已选的下标集合,j 表示上一个位置的下标function<int(int, int)> dfs = [&](int s, int j) -> int{if (s == (1 << n) - 1){ // 所有位置都填完了,最后一个位置是下标 jreturn abs(j - nums[0]);}int &res = memo[s][j]; // 注意这里是引用if (res != -1){ // 之前计算过return res;}res = INT_MAX;// 枚举当前位置填下标 kfor (int k = 1; k < n; k++){if ((s >> k & 1) == 0){ // k 之前没填过res = min(res, dfs(s | 1 << k, k) + abs(j - nums[k]));}}return res;};vector<int> ans;// 找到最佳路径function<void(int, int)> make_ans = [&](int s, int j) -> void{ans.push_back(j);if (s == (1 << n) - 1)return;int final_res = dfs(s, j);for (int k = 1; k < n; k++){if ((s >> k & 1) == 1){ // k 之前填过continue;}if (dfs(s | 1 << k, k) + abs(j - nums[k]) == final_res){make_ans(s | 1 << k, k);break;}}};make_ans(1, 0);return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n22n),其中 n 是数组 nums 的长度。

空间复杂度:O(n2n),其中 n 是数组 nums 的长度。

相关文章:

Leetcode 第 397 场周赛题解

Leetcode 第 397 场周赛题解 Leetcode 第 397 场周赛题解题目1&#xff1a;3146. 两个字符串的排列差思路代码复杂度分析 题目2&#xff1a;思路代码复杂度分析 题目3&#xff1a;3148. 矩阵中的最大得分思路代码复杂度分析 题目4&#xff1a;3149. 找出分数最低的排列思路代码…...

Python+Selenium自动化测试项目实战

第 1 章 自动化测试 1.1、自动化测试介绍 自动化测试就是通过自动化测试工具帮我们打开浏览器&#xff0c;输入网址&#xff0c;输入账号密码登录&#xff0c;及登录后的操作&#xff0c;总的说来自动化测试就是通过自动化测试脚本来帮我们从繁琐重复的手工测试里面解脱出来&…...

WPS部分快捷操作汇总

记录一些个人常用的WPS快捷操作 一、去除文档中所有的超链接&#xff1a; 1、用WPS打开文档&#xff1b; 2、用Ctrla全选&#xff0c;或者点击上方的【选择】-【全选】&#xff0c;选中文档全部内容&#xff1b; 3、按CTRLSHIFTF9组合键&#xff0c;即可一次性将取文档中所有…...

Kubernetes (K8s) 普及指南

在当今的云计算和微服务时代&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;已经成为容器编排的标准工具。它帮助开发者和运维人员管理和部署应用程序&#xff0c;实现高可用性、可伸缩性和自我修复。本文将详细介绍Kubernetes的基本概念、核心组件、工作原理及其优势。…...

Oracle RAC 集群配置共享目录ACFS

Oracle RAC 集群配置共享目录ACFS 应用场景&#xff1a;创建的ACFS文件系统用于部署OGG做数据同步使用。 1、创建共享磁盘组 create diskgroup OGG external redundancy disk /dev/mapper/ASM08, /dev/mapper/ASM09; 2、创建 acfs 文件系统 ACFS文件系统 在ASM磁盘组中通过A…...

Google Cloudbuild yaml file 中 entrypoint 和 args 的写法

编写cloudbuild.yaml 时有几个关键参数 entrypoint 和 args 的基本介绍 id: 显示在 cloud build logs 里的item 名字 name: docker 镜像名字 - 下面的命令会在这个镜像的1个容器instance 内执行 entrypoint: 执行的命令入口 &#xff0c; 只能有1个对象 args&#xff1a; 命名…...

鸿蒙开发接口图形图像:【@ohos.window (窗口)】

窗口 窗口提供管理窗口的一些基础能力&#xff0c;包括对当前窗口的创建、销毁、各属性设置&#xff0c;以及对各窗口间的管理调度。 该模块提供以下窗口相关的常用功能&#xff1a; [Window]&#xff1a;当前窗口实例&#xff0c;窗口管理器管理的基本单元。[WindowStage]&…...

LLM 基准测试的深入指南

随着越来越多的 LLM 可用,对于组织和用户来说,快速浏览不断增长的环境并确定哪些模型最适合他们的需求至关重要。实现这一目标的最可靠方法之一是了解基准分数。 考虑到这一点,本指南深入探讨了 LLM 基准的概念、最常见的基准是什么以及它们需要什么,以及仅依赖基准作为模…...

深入理解Redis事务、事务异常、乐观锁、管道

Redis事务与MySQL事务 不一样。原子性&#xff1a;MySQL有Undo Log机制&#xff0c;支持强原子性&#xff0c;和回滚。Redis只能保证事务内指令可以不被干扰的在同一批次执行&#xff0c;且没有机制保证全部成功则提交&#xff0c;部分失败则回滚。隔离性&#xff1a;MySQL的隔…...

17、Spring系列-SpringMVC-请求源码流程

前言 Spring官网的MVC模块介绍&#xff1a; Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就已包含在Spring框架中。正式名称“ Spring Web MVC”来自其源模块的名称&#xff08;spring-webmvc&#xff09;&#xff0c;但它通常被称为“ Spring MVC…...

对简单工厂模式、工厂方法模式、抽象工厂模式的简单理解

简单工厂模式 三部分组成 抽象类一些抽象类的具体实现类工厂类 把创建对象的任务交给一个工厂类来实现&#xff0c;对业务进行封装。 优点&#xff1a;实现了任务分离&#xff0c;客户端不用关心业务的具体实现&#xff0c;交由工厂来“生产”。 缺点&#xff1a;违背开闭原…...

PostgreSQL常用插件

PostgreSQL 拥有许多常用插件&#xff0c;这些插件可以大大增强其功能和性能。以下是一些常用的 PostgreSQL 插件&#xff1a; 性能监控和优化 pg_stat_statements 1.提供对所有 SQL 语句执行情况的统计信息。对调优和监控非常有用。 2.安装和使用&#xff1a; pg_stat_k…...

mysql表字段超过多少影响性能 mysql表多少效率会下降

一直有传言说&#xff0c;MySQL 表的数据只要超过 2000 万行&#xff0c;其性能就会下降。而本文作者用实验分析证明&#xff1a;至少在 2023 年&#xff0c;这已不再是 MySQL 表的有效软限制。 传言 互联网上有一则传言说&#xff0c;我们应该避免单个 MySQL 表中的数据超过 …...

Vue进阶之Vue无代码可视化项目(一)

Vue无代码可视化项目 项目搭建初始步骤拓展:工程项目从0-1项目规范化package.jsoncpell.jsoncustom-words.txtts-eslint规则.eslintrc.cjsgit钩子检查有没有问题type-checkspellchecklint:stylehusky操作安装pre-commitpnpm的commit规范package.json:commitlint.config.cjs安装…...

初识C++ · 模拟实现list

目录 前言 1 push_back pop_back 2 迭代器类 2.1 ! 2.2 -- 2.3 * 3 Print_List 4 有关自定义类型 5 有关const迭代器 6 拷贝构造 赋值 析构 Insert erase 前言 有了string&#xff0c;vector的基础&#xff0c;我们模拟实现list还是比较容易的&#xff0c;这里同…...

电商运营-2024年6月1日

作为一名电商运营&#xff0c;针对淘工厂平台&#xff0c;需要具备以下核心技能和素质&#xff1a; 核心技能 新店入驻与产品管理 熟练掌握淘工厂平台的新店入驻流程&#xff0c;包括资质准备、资料提交、审核跟进等。精通产品上架技巧&#xff0c;确保产品信息准确、图片清晰…...

Go跨平台编译

1.编译windows平台运行程序 # windows env GOOSwindows GOARCHamd64 go build main.go2.编译linux平台运行程序 # linux env GOOSlinux GOARCHamd64 go build main.go 3.编译macos平台运行程序 # macos env GOOSdarwin GOARCHamd64 go build main.go 编译结果:...

生产计划排产,制定每小时计划产量(“查表法”SQL计算)

根据日生产计划产量排产&#xff0c;制定每2小时理论计划生产产量。 每2小时计划产量 每2小时工作时间&#xff08;秒&#xff09;/生产计划节拍&#xff08;秒&#xff09;。 假设&#xff0c;生产计划节拍 &#xff1a; 25.0(秒)/台 工厂以每天8点00分钟作为当日工作日的…...

视频汇聚管理安防监控平台EasyCVR程序报错“create jwtSecret del server class:0xf98b6040”的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…...

头歌页面置换算法第2关:计算OPT算法缺页率

2 任务:OPT算法 2.1 任务描述 设计OPT页面置换算法模拟程序:从键盘输入访问串。计算OPT算法在不同内存页框数时的缺页数和缺页率。要求程序模拟驻留集变化过程,即能模拟页框装入与释放过程。 2.2任务要求 输入串长度作为总页框数目,补充程序完成OPT算法。 2.3算法思路 OPT算…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...