Leetcode - 周赛397

目录

一,3146. 两个字符串的排列差

二,3147. 从魔法师身上吸取的最大能量

三,3148. 矩阵中的最大得分

四,3149. 找出分数最低的排列


一,3146. 两个字符串的排列差

本题就是求同一个字符在两个字符串中的下标之差的绝对值的和,可以使用数组来统计字符的下标,再求下标之差的绝对值的和。

代码如下:

class Solution {public int findPermutationDifference(String s, String t) {int[] cnt = new int[26];int idx = 0;for(char ch : s.toCharArray()){cnt[ch-'a'] = idx++; }idx = 0;int ans = 0;for(char ch : t.toCharArray()){ans += Math.abs(cnt[ch-'a']-idx++);}return ans;}
}

二,3147. 从魔法师身上吸取的最大能量

本题实际上就是把energy数组分成k段,求每一段中连续子数组的最大值(开始位置随便,结束位置必须是这一段的结尾),所以可以枚举每一段的结束位置,倒着往前遍历,求最大值,有点像希尔排序。画个图理解一下:

代码如下:

class Solution {public int maximumEnergy(int[] energy, int k) {int n = energy.length;int ans = Integer.MIN_VALUE;for(int i=n-1; i>=n-k; i--){int res = 0;for(int j=i; j>=0; j-=k){res += energy[j];ans = Math.max(res, ans);}}return ans;}
}

三,3148. 矩阵中的最大得分

写本题前有一点要注意到:A -> B -> C 的得分和 A -> C 的得分是一样的,也就是说,只需要关注起点和终点的差就行,即只需要找到NxM的矩阵中的子矩形它的 终点 - 起点 最大就行。

所以这题就有点类似于求二维前缀和,只不过这里是求二维最小值f[i][j],而答案就是 g[i][j] - Math.min( f[i-1][j],f[i][j-1]),中的最大值

注意:题目要求必须移动一次,所以不能使用 g[i][j] - f[i][j] 来求最大值,可能出现原地不动的情况

class Solution {//f[i+1][j+1]:表示(0,0)->(i,j)这个矩阵的最小值public int maxScore(List<List<Integer>> grid) {int n = grid.size(), m = grid.get(0).size();int[][] f = new int[n+1][m+1];for(int i=0; i<n+1; i++) f[i][0] = Integer.MAX_VALUE;for(int j=0; j<m+1; j++) f[0][j] = Integer.MAX_VALUE;int ans = Integer.MIN_VALUE;for(int i=0; i<n; i++){for(int j=0; j<m; j++){f[i+1][j+1] = Math.min(f[i+1][j], f[i][j+1]);ans = Math.max(ans, grid.get(i).get(j) - f[i+1][j+1]);f[i+1][j+1] = Math.min(f[i+1][j+1], grid.get(i).get(j));}}return ans;}
}

四,3149. 找出分数最低的排列

按照暴力的思路来看,枚举[0,.....,n]的所有排列顺序,(之前使用过的后面就不能再次使用),计算出其中分数最低且字典序最小的排序。所以使用 dfs 需要两个参数,一个是之前已使用过的数(这是无序的,只有相邻的数才会对分数产生影响),二是当前位置的前一个数(这是为了计算它的分数)。

  • dfs(i,j):表示在选择过 i 集合(使用二进制来表示集合)中的数,且前一个数为 j 的最低的分数。
  • 从小到大枚举下一个可以选择的数 k,res = Math.max( res, dfs(i|1<<k, k) + Math.abs( k - nums[k]) )
  • 当所有的数都选过之后,直接 return Math.abs(j - nums[0])

起始位置一定可以等于 0:实际上这里只要 perm[i] 与 nums[perm[i+1]] 的对应关系不变,起始位置可以是任何数,只不过题目要求字典序最小,所以这里起始位置为 0。画个图理解一下:

另外一点,题目不是要求返回最小值,而是要返回perm数组,所以还需要多写一步,获取perm数组的方法直接看代码注释。

代码如下:

class Solution {int[] nums;int n;int[][] memo;public int[] findPermutation(int[] nums) {this.n = nums.length;this.nums = nums;memo = new int[1<<14][14];for(int[] row : memo)Arrays.fill(row, -1);int[] ans = new int[n];print_dfs(1, 0, ans, 0);//1:表示集合中有0return ans;}int dfs(int i, int j){if(i == (1<<n)-1){return Math.abs(j-nums[0]);}if(memo[i][j]!=-1) return memo[i][j];int res = Integer.MAX_VALUE;for(int x=1; x<n; x++){//枚举可取的数if((i>>x&1)==0)//该数没有被选择过res = Math.min(res, dfs(i|1<<x, x) + Math.abs(j - nums[x]));}return memo[i][j] = res;}void print_dfs(int i, int j, int[] ans, int idx){ans[idx] = j;//记录数组if(i == (1<<n)-1){return;}int final_ans = dfs(i, j);//找到(i,j)最小的值for(int x=1; x<n; x++){//从小到大遍历,确保字典序最小if((i>>x&1)==1)continue;if(final_ans == dfs(1<<x|i, x) + Math.abs(j-nums[x])){//如果值相同,说明当前数选择的就是xprint_dfs(i|1<<x, x, ans, idx+1);break;}}}
}

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

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

相关文章

QCustomPlot的了解

&#xff08;一&#xff09;QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现-CSDN博客 关键代码&#xff1a; QT core gui printsupport 使用上面文章中的代码跑起来的程序效果图&#xff1a; 我的学习过程&#xff1a; 最开始初…

家用充电桩远程监控安全管理系统解决方案

家用充电桩远程监控安全管理系统解决方案 在当今电动汽车日益普及的背景下&#xff0c;家用充电桩的安全管理成为了广大车主关注的重点问题。为了实现对充电桩的高效、精准、远程监控&#xff0c;一套完善的家用充电桩远程监控安全管理系统解决方案应运而生。本方案旨在通过先…

如何去除字符串两侧的空白字符?

TRIM函数会去掉字符串左侧和右侧的空格&#xff0c;语法是&#xff1a;TRIM(字符串) excel中&#xff0c;TRIM函数能去掉字符串左侧和右侧的空格&#xff0c;它的ASCII码是32。 以下设定一个字符串组合&#xff0c;它的第一个字符中空格&#xff0c;最后一个字符是换行符 &q…

【Linux进程通信 —— 管道】

Linux进程通信 —— 管道 进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质进程间通信的分类 管道什么是管道匿名管道匿名管道的原理pipe用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则管道的特点管道的四种特殊情况管…

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…

三子棋游戏

1、实现三子棋 test.c //测试游戏的逻辑 game.c //游戏代码的实现 game.h //游戏代码的声明&#xff08;函数声明&#xff0c;符号定义&#xff09; 1、 在主函数里实现&#xff0c;首先有个界面&#xff0c;让玩家选择是否玩游戏。上来就先打印菜单&#xff0c;用do ... …

优秀测试的核心能力!2招高效定位分析BUG!

之所以写这一篇文章&#xff0c;是突然想起来曾经在测试过程中被开发嘲讽过&#xff0c;事情是这样的&#xff0c;当时发现了一个疑似前端的Bug就草草提交到了禅道&#xff0c;结果刚来的女前端看到了就有点生气地问我为啥不查清到底是前后端问题就直接派给她前端了&#xff0c…

【python量化交易】—— Alpha选股策略 - Qteasy自定义交易策略【附源码】

使用qteasy创建并回测Alpha选股交易策略 使用qteasy创建并回测Alpha选股交易策略策略思想第一种自定义策略设置方法&#xff0c;使用持仓数据和选股数据直接生成比例交易信号PS信号&#xff1a;第二种自定义策略设置方法&#xff0c;使用PT交易信号设置持仓目标&#xff1a;第三…

【数组中重复的数据】leetcode,python

和上题一样&#xff0c;【找到所有数组中消失的数字】 换个判断条件就行 class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:nlen(nums)for i in nums:x(i-1)%nnums[x]n#只需要替换条件即可return [i1 for i,num in enumerate(nums) if num>(2*n)…

海外云手机的运作原理和适用场景

海外云手机是一种基于云计算技术的虚拟手机服务&#xff0c;通过将手机操作系统和应用程序托管在远程服务器上&#xff0c;实现用户可以通过互联网连接来使用和管理手机功能&#xff0c;而无需实际拥有物理手机。以下是有关海外云手机的相关信息&#xff1a; 海外云手机的运作原…

如何利用命令提示符列出文件?这里提供了几个实例供你参考

序言 什么命令可以用来列出目录中的文件&#xff1f;如何在命令提示符Windows 10/11中列出文件&#xff1f;很多人对这些问题感到困惑。在这篇文章中&#xff0c;我们详细解释了命令提示符列出文件的主题。 CMD&#xff08;命令提示符&#xff09;是一个功能强大的Windows内置…

Keil问题解决:结构体数组初始化,初始化后的值不是目标值

省流&#xff1a;使用的编译器为compiler version 6&#xff0c;切换为compiler version 5 如果缺少编译器&#xff0c;请参考&#xff1a;Keil手动安装编译器V5版本 结构体定义&#xff1a; typedef struct _TASK_COMPONENTS {uint8_t Run; // 程序运行标…

雍禾植发张东宏:以诚相待毛发患者

医学道路上的奋斗往往需要坚定的信念和不懈的努力。对于张东宏医生来说&#xff0c;医学并非止步于书本知识&#xff0c;而是一次次与患者对话、一次次实操中的历练和积累。在他的成长历程中&#xff0c;医学之路如同一棵参天大树&#xff0c;每一步都是扎实的打磨&#xff0c;…

STM32F407 2个高级定时器生成2路无刷电机波形以及相电流采集程序(寄存器版)

stm32f407 高级定时1、定时8 生成20k 中心PWM 波形 并分别用其通道4 触发ADC1 ADC2 采样 用于分别两无刷电机foc 电流环控制&#xff0c;ADC1产生50us的电流采集完成中断&#xff0c;用于foc算法周期运算 主要参考高级定时器的寄存器和ADC寄存器 首先&#xff0c;要使用STM32F…

代码复现|Demucs Music Source Separation

一、背景介绍 Demucs是一个开源的音源分离项目。 Demucs在算法层面前后经历了三次大版本的进化&#xff0c;最原始的V1版本是&#xff1a;编解码LSTM。具体算法原理图如下所示。该版本在时域进行音源分离。关于阅读笔记请点击这篇文章。 V1版本原理图 V2版本是同时使用时域和频…

2、快速搭建Vue框架以及项目工程

本篇文章详细讲解在配置完vue2环境后如何快速搭建一个Vue框架和项目工程。&#xff08;以智慧农业云平台为例&#xff09; 2.1 Vue工程创建 2.1.1创建想要存放的Vue文件夹 找到想要存放的文件夹并在目录搜索框中&#xff0c;并用管理员的方式打开。 2.1.2创建Vue工程 2、安装…

prompt工程策略(一:使用 CO-STAR 框架来搭建 prompt 的结构)

原文&#xff1a;我是如何赢得GPT-4提示工程大赛冠军的 原文的原文&#xff1a; How I Won Singapore’s GPT-4 Prompt Engineering Competition 为了让 LLM 给出最优响应&#xff0c;为 prompt 设置有效的结构至关重要。CO-STAR 框架是一种可以方便用于设计 prompt 结构的模板…

2024最新Kali Linux安装教程(非常详细)从零基础入门到精通(附安装包)!

什么是Kali Linux&#xff1f; Kali Linux是一个高级渗透测试和安全审计Linux发行版&#xff0c;其功能非常强大&#xff0c;能够进行信息取证、渗透测试、攻击WPA / WPA2保护的无线网络、离线破解哈希密码、将android、Java、C编写的程序反编译成代码等等&#xff0c;是黑客的…

Invalid bound statement (not found) 六种解决方法

前五种参考博文&#xff1a; Invalid bound statement (not found) 五种解决方法-CSDN博客 第六种&#xff1a; 在启动类上加上MapperScan&#xff0c;指定扫描包

【C++】list原理讲解及其实现

目录 一、认识list底层结构 二、list的构造类函数 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 七、list和vector的比较 前言 要模拟实现list&#xff0c;必须要熟悉list的底层结构以及其接口的含义&#xff0c;在上一篇我们仔细讲解了list的…