LeetCode 第397场周赛个人题解
目录
100296. 两个字符串的排列差
原题链接
思路分析
AC代码
100274. 从魔法师身上吸取的最大能量
原题链接
思路分析
AC代码
100281. 矩阵中的最大得分
原题链接
思路分析
AC代码
100312. 找出分数最低的排列
原题链接
思路分析
AC代码
100296. 两个字符串的排列差
原题链接
两个字符串的排列差 - 力扣 (LeetCode) 竞赛
思路分析
签到题,两次遍历搞定
AC代码
class Solution:def findPermutationDifference(self, s: str, t: str) -> int:mp = dict()res = 0for i, x in enumerate(s):mp[x] = ifor i, x in enumerate(t):res += abs(i - mp[x])return res
100274. 从魔法师身上吸取的最大能量
原题链接
从魔法师身上吸取的最大能量 - 力扣 (LeetCode) 竞赛
思路分析
记忆化搜索
dfs(0)代表从0出发的最大能量,记忆化剪枝保证每个结点只走一次
时间复杂度O(n)
AC代码
class Solution:def maximumEnergy(self, energy: List[int], k: int) -> int:n = len(energy)@cache def dfs(x: int) -> int:if x >= n:return 0return energy[x] + dfs(x + k)return max(dfs(i) for i in range(n))
100281. 矩阵中的最大得分
原题链接
矩阵中的最大得分 - 力扣 (LeetCode) 竞赛
思路分析
典中典网格上递推,为了拼手速还是用的记忆化搜索
不过注意起点特判,可以在递归函数里面多加个bool参数
时间复杂度O(n^2)
AC代码
class Solution:def maxScore(self, g: List[List[int]]) -> int:m, n = len(g), len(g[0])@cachedef dfs(x: int, y: int, lim: bool):if x >= m or y >= n:return 0ret = -inf if lim else 0if x + 1 < m:ret = max(ret, g[x + 1][y] - g[x][y] + dfs(x + 1, y, False))if y + 1 < n:ret = max(ret, g[x][y + 1] - g[x][y] + dfs(x, y + 1, False))return retreturn max(dfs(i, j, True) for j in range(n) for i in range(m))
100312. 找出分数最低的排列
原题链接
找出分数最低的排列 - 力扣 (LeetCode) 竞赛
思路分析
看得出数据很弱啊,全排列+最优性剪枝就过了
就是全排列的暴搜,然后如果当前已经比最优解更差了就剪枝
时间复杂度:阶乘级别带剪枝的就不分析了
2024.5.1214:30
回看这道题发现就是状压dp求哈密顿回路板子题,而且起点一定是0,任何解可以轮转到0为起点
那么时间复杂度就是O(2^n * n)
AC代码
暴力
class Solution:def findPermutation(self, nums: list[int]) -> list[int]:n = len(nums)mi = n * nret = []path = []st = set()def dfs(res: int, s: int) -> None:nonlocal mi, path, ret, st# print(path, s, mi, res)if s >= mi:returnif (not res) and s + abs(path[-1] - nums[path[0]]) < mi:mi = s + abs(path[-1] - nums[path[0]])ret = path.copy()# print(ret, s)returnfor i in range(n):if not (i in st):path.append(i)st.add(i)t = 0 if res == n else abs(nums[path[-1]] - path[-2])dfs(res - 1, s + t)path.pop()st.remove(i)dfs(n, 0)return ret
状压dp
class Solution:def findPermutation(self, nums: List[int]) -> List[int]:n = len(nums)g = [[0] * n for _ in range(n)]for i in range(n):for j in range(n):g[i][j] = abs(i - nums[j])f = [[inf] * n for _ in range(1 << n)]ans = [["" + chr(ord('a') + n) * n] * n for _ in range(1 << n)]f[1][0] = 0ans[1][0] = "a"for i in range(1, 1 << n):if i & 1:for j in range(n):if i >> j & 1:for k in range(n):if i >> k & 1:t = f[i ^ (1 << j)][k] + g[k][j]s = ans[i ^ (1 << j)][k] + chr(ord('a') + j)if t < f[i][j]:f[i][j] = tans[i][j] = selif t == f[i][j] and s < ans[i][j]:ans[i][j] = smi = infret = str(n) * nfor i in range(1, n):t = f[(1 << n) - 1][i] + g[i][0]if t < mi:mi = f[(1 << n) - 1][i] + g[i][0]ret = ans[(1 << n) - 1][i]elif t == mi and ans[(1 << n) - 1][i] < ret:ret = ans[(1 << n) - 1][i]return [ord(x) - ord('a') for x in ret]
相关文章:
LeetCode 第397场周赛个人题解
目录 100296. 两个字符串的排列差 原题链接 思路分析 AC代码 100274. 从魔法师身上吸取的最大能量 原题链接 思路分析 AC代码 100281. 矩阵中的最大得分 原题链接 思路分析 AC代码 100312. 找出分数最低的排列 原题链接 思路分析 AC代码 100296. 两个字符串的排…...

Mysql数据库二进制日志导致磁盘满了处理过程
数据库的二进制日志是数据库管理系统(DBMS)用来记录所有对数据库进行修改的操作的记录。这种日志对于数据库的备份、恢复、复制和审计等操作至关重要。 以MySQL数据库为例,二进制日志(Binary Log)记录了所有更改数据的…...
前端面试题日常练-day07 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 1. 在 JavaScript 中,以下哪个方法可以用于从数组的末尾添加一个或多个元素? A) push() B) pop() C) shift() D) unshift()2. 下列哪个 HTML 标签用于定义表格的表头&#…...
Uniapp H5开发常见问题解析
引言 在移动应用开发领域,Uniapp已经成为一个备受瞩目的技术框架,其跨平台能力和高效开发特性使得开发者能够更加便捷地构建出功能丰富、性能优越的应用程序。特别是在H5开发中,Uniapp的应用场景日益广泛,然而,随之而…...

QT状态机4-使用并行状态来避免组合爆炸
#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent):...
MemoryModule - 应用编程细节
文章目录 MemoryModule - 应用编程细节概述笔记实验环境升级MemoryModule,在上下文中加入DLL在内存载入前的信息MemoryModule.hMemoryModule.cpp实现接口MemoryGetPayload() 整理 - 在内存载入的DLL中,取得资源表中的信息,取得载入前的DLL内容…...
Java程序CPU持续高,如何排查?
首先找到进程ID jps然后找到该进程用占用cpu高的线程 top -Hp 进程ID将线程ID转化为十六进制 printf “0x%x” 线程ID使用jstack 工具跟踪堆栈定位问题 jstack 进程ID | grep 十六进制线程ID -A 5说明,最后-A 5是打印出来后5行。...
(Java)心得:LeetCode——15.三数之和
一、原题 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。…...
Rust中忽略JSON反序列化时的不必要字段
在Rust中处理JSON数据时,经常会遇到JSON数据中包含一些在目标数据结构中不存在的字段的情况。如果你使用的是serde和serde_json这两个流行的库来处理JSON,那么有一些简单的方法可以忽略这些不必要的字段。 默认行为:忽略未知字段 在Rust中&…...

UDP多对多组播通信
广播和多播仅应用于UDP。TCP是一个面向连接的协议,TCP一定是点对点的,一点是两个主机来建立连接的,TCP肯定是单播。只有UDP才会使用广播和组播。 如下示例实现一个UDP多对多的组播通信,进程中有收、发两个线程,分别表…...

Linux技术---部署PXE服务器实现批量安装操作系统
部署PXE服务器实现批量安装操作系统 部署PXE服务器实现批量安装操作系统 部署PXE服务器实现批量安装操作系统1.安装相关服务组件1.1 安装tftp和xinetd1.2 安装DHCP服务1.3 准备 Linux 内核、初始化镜像文件、 PXE 引导程序、安装FTP服务并准备安装源1.4 配置启动菜单文件1.5 验…...

日志:打印技巧
一、概览 Unity日志打印技巧 常规日志打印彩色日志日志存储与上传日志开关日志双击溯源 二、常规日志打印 1、打印Hello World 调用堆栈可以很好的帮助我们定位问题,特别是报错的Error日志 Debug.Log("Hello World");Debug.Log("This is a log m…...

二叉树的常见操作
建立树 复制二叉树 计算深度 计算总结点数 计算叶子结点数...

CSS 根据子元素选择父元素,并设置父元素的样式
场景举例:当子元素有增加了一个class时,需要影响其父元素的样式 可以使用":has"伪类来实现选择父元素的效果 <style>.parent:has(.child){background-color: #eee;}p{width:100px;border:1px solid #000;} </style> <body>…...
onnx转trt时,关于动态shape自动配置默认值的脚本
onnx转trt时,关于动态shape自动配置默认值,一般需要指定3个shape,分别是最小最优与最大。但是我们在测试时不想写那么多的代码,能否自动实现3个shape的配置,这里实现了一版。 import osimport tensorrt as trt import…...

实验室无法培养的菌,原来可以这么研究!
厌氧氨氧化(anammox)细菌在全球氮循环和废水氮去除中发挥着至关重要的作用,由于anammox细菌生长缓慢、难以培养等特点,对其生态学和生物学特性知之甚少。近日,凌恩生物合作客户重庆大学陈猷鹏教授团队在《Science of t…...

Xed编辑器开发第一期:使用Rust从0到1写一个文本编辑器
这是一个使用Rust实现的轻量化文本编辑器。学过Rust的都知道,Rust 从入门到实践中间还隔着好几个Go语言的难度,因此,如果你也正在学习Rust,那么恭喜你,这个项目被你捡到了。本项目内容较多,大概会分三期左右陆续发布&a…...

农业自动气象监测站:赋能智慧农业的新动力
在信息化、智能化快速发展的今天,农业领域也迎来了前所未有的变革。其中,农业自动气象监测站作为智慧农业的重要组成部分,正在发挥着越来越重要的作用。它们如同农业生产的“眼睛”和“耳朵”,实时感知和记录着大气的微妙变化&…...

2-6 任务 猜数小游戏(单次版)
本任务要求编写一个猜数小游戏(单次版),游戏规则是计算机产生一个0到100之间的随机整数,用户通过输入猜测的数字进行猜测,根据猜测情况给出提示,直到猜对为止。编程思路是利用while循环和多分支结构实现永真…...
springboot 定时任务解决方案
Scheduled (springboot 自带的 注解) 基于注解Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。 EnableScheduling注解: 在配置类上使用,开启计划任务的支持(类上)。…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...