Leetcode - 周赛414

目录

一,3280. 将日期转换为二进制表示

二,3281. 范围内整数的最大得分

三,3282. 到达数组末尾的最大得分

四,3283. 吃掉所有兵需要的最多移动次数


一,3280. 将日期转换为二进制表示

本题就是简单的字符串和整数之间的转换,可以直接调用库函数解决,代码如下:

class Solution {public String convertDateToBinary(String date) {String[] t = date.split("-");int i = 0;for(String x : t){t[i++] = Integer.toBinaryString(Integer.parseInt(x));}return String.join("-", t);}
}

二,3281. 范围内整数的最大得分

本题求数组两两之间最小的绝对差,那么最小值一定会出现在排序后相邻的两数之间,所以我们可以先将数组排序。又因为题目中的数据范围导致我们无法使用O(n^2)的做法,这时就需要至少O(nlogn)的做法,再结合排序和求最大值,自然而然就能想到二分,再分析一下是否具有单调性,答案越小,它越能使满足题目要求,具有单调性,所以该题的做法就是二分答案。

知道二分后,最难的一步就是如何判断二分的答案 k 是否满足条件,要想使得每个start[i]的范围都在[start[i],start[i] + d]之间,那么对于每个值都需要尽可能的小(这样后一个值才更可能处于范围内),所以我们的第一个值一定选择start[0],如果 x1 = start[0] + k 超过了 start[1] + d,那么 r 缩小;如果 x1 <= start[1] + d,此时还需要保证 x1 >= start[1],也就是 x1 = max(start[i],x0 + k),对于所有的 i 都满足 xi <= start[i] + d,那么 l 增大。

代码如下:

class Solution {public int maxPossibleScore(int[] start, int d) {int n = start.length;Arrays.sort(start);long l = 0, r = (start[n-1] - start[0] + d)/(n-1);//最大是均值while(l <= r){long mid = (l + r) / 2;if(check(mid, start, d)){l = mid + 1;}else{r = mid - 1;}}return (int)l-1;}boolean check(long k, int[] start, int d){int n = start.length;long now = start[0];for(int i=1; i<n; i++){now = Math.max(now + k, start[i]);if(now > start[i] + d) return false;}return true;}
}

三,3282. 到达数组末尾的最大得分

本题看到后的第一个想法就是dfs选或不选,记录前一个选择的下标 j,看是否选择nums[i]。但是对于本题来说,dfs的做法的时间复杂度是O(n^2),它一定会超时,所以需要其他做法。

"dp的尽头是贪心",所以我们可以试着使用贪心的思路去做,下面画个图理解一下:

我们将数组转换成矩形,那么计算最大总得分就变成了计算矩形的最大面积,那么要想面积大,那么对于每个下标 i 来说,当前能得到的面积一定是max(nums[0:i])。注意:题目中的终点是n-1!!

代码如下:

class Solution {public long findMaximumScore(List<Integer> nums) {int n = nums.size();long ans = 0, mx = nums.get(0);for(int i=1; i<n; i++){ans += mx;mx = Math.max(mx, nums.get(i));}return ans;}
}

四,3283. 吃掉所有兵需要的最多移动次数

本题是一道综合题,我们需要先通过 bfs 计算出(kx,ky) 与 (xi,yi) 任意两点之间的距离(指🐎从a -> b最小的移动距离),预处理之后,问题就变成了从 0 开始,将所有点联通所需的最大移动次数。

假设有 n 个兵,考虑下面两种情况:

  • Alice 吃 1 号兵,Bob 吃 2 号兵,Alice 吃 3 号兵,轮到 Bob 操作
  • Bob 吃 1 号兵,Alice 吃 2 号兵,Alice 吃 3 号兵,轮到 Bob 操作

可以发现上述两种做法都是 Alice 吃 3 号兵,轮到 Bob 操作,具有重复子问题,可以使用dfs来做。根据上述情况,我们需要两个参数:

  • i:表示前一个被吃掉的兵
  • mask:表示所有已经被吃掉的兵的集合

还有一点需要注意:Alice 和 Bob 所进行的操作不相同,所以需要分别讨论:

  • 当 mask 中 1 的个数为奇数时,说明轮到 Alice 操作,假设当前选 j(不在mask集合中),dfs(i,mask) = max(dfs(j,maskUk) + dis[i][j])
  • 当 mask 中 1 的个数为偶数时,说明轮到 Bob 操作,假设当前选 j(不在mask集合中),dfs(i,mask) = min(dfs(j,maskUk) + dis[i][j])

代码如下:

class Solution {int[][] dirct = new int[][]{{1,2},{-1,-2},{-1,2},{1,-2},{2,1},{-2,-1},{-2,1},{2,-1}};public int maxMoves(int kx, int ky, int[][] positions) {int n = positions.length;//(kx,ky)->(i,j)的最短距离//将(kx, ky) 和 (xi, yi) 依次当成 0 1 2 3 ..... nint[][] dis = new int[n+1][n+1];int[][] f = bfs(kx, ky);for(int i=0; i<n; i++){dis[0][i+1] = dis[i+1][0] = f[positions[i][0]][positions[i][1]];}for(int i=0; i<n; i++){f = bfs(positions[i][0], positions[i][1]);for(int j=i+1; j<n; j++)dis[i+1][j+1] = dis[j+1][i+1] = f[positions[j][0]][positions[j][1]];}//点到点的最短距离//从0开始互相联通的最多移动次数memo = new int[n+1][1<<(n+1)];for(int i=0; i<=n; i++)Arrays.fill(memo[i], -1);return dfs(0, 1, dis);}int[][] memo;int dfs(int i, int mask, int[][] dis){int cnt = Integer.bitCount(mask);if(cnt == dis.length) return 0;if(memo[i][mask] != -1) return memo[i][mask];int res = cnt%2==1?Integer.MIN_VALUE:Integer.MAX_VALUE;for(int j=1; j<dis.length; j++){if((mask>>j&1)==1) continue;if(cnt%2 == 1) res = Math.max(res, dfs(j, mask|1<<j, dis) + dis[i][j]);//Alice要求最大路径if(cnt%2 == 0) res = Math.min(res, dfs(j, mask|1<<j, dis) + dis[i][j]);//Bob要求最短路劲}return memo[i][mask] = res;}int[][] bfs(int kx, int ky){//计算从 (kx, ky) -> (x, y) 的最小移动次数int[][] f = new int[50][50];Queue<int[]> que = new LinkedList<>();que.add(new int[]{kx, ky});while(!que.isEmpty()){int size = que.size();while(size-- > 0){int[] t = que.poll();for(int[] d : dirct){int x = t[0] + d[0], y = t[1] + d[1];if(x>=0 && x<50 && y>=0 && y<50 && f[x][y]==0){f[x][y] = f[t[0]][t[1]] + 1;que.add(new int[]{x, y});}}}}return f;}
}

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

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

相关文章

爆改YOLOv8|利用yolov9的ADown改进卷积Conv-轻量化

1&#xff0c;本文介绍 本文将利用YOLOv9的ADown模块改进卷积。 关于ADown的详细介绍可以看论文&#xff1a;https://arxiv.org/abs/2402.13616 本文将讲解如何将ADown融合进yolov8 话不多说&#xff0c;上代码&#xff01; 2&#xff0c; 将ADown融合进yolov8 2.1 步骤一…

【高中物理】用代码缩写胡克定律公式原理图

用代码缩写胡克定律公式原理图 代码实现了以下功能&#xff1a; 交互式滑块&#xff1a;用户可以通过滑块调整弹簧的弹性系数&#xff08;k&#xff09;、拉力大小&#xff08;F&#xff09;和弹簧的原长&#xff08;l0&#xff09;&#xff0c;实时观察弹簧的伸长和受力变化。…

在VB.net中,TimeSpan有什么属性与方法

标题 在VB.net中&#xff0c;TimeSpan有什么属性与方法 正文 在 VB.NET 中&#xff0c;TimeSpan 结构表示时间间隔&#xff0c;即一段时间&#xff0c;而不表示特定的时间点。TimeSpan 提供了多种属性来获取时间间隔的各个组成部分&#xff0c;以及一些方法来操作这些时间间隔。…

【观察者】设计模式:构建灵活且响应式的软件系统

引言 在软件开发中&#xff0c;我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时&#xff0c;我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式&#xff0c;它定义…

基于vue框架的城市交通管理系统的设计与实现9fcck(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,区域,车站信息,公交线路 开题报告内容 基于Vue框架的城市交通管理系统的设计与实现开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速&#xff0c;城市交通问题日益严峻&#xff0c;包括交通拥堵、交通事故频发、…

“CSDN独家揭秘:AIGC技术在AI绘画领域的应用与学习攻略”

导语&#xff1a;人工智能的发展正推动着内容创作的革新&#xff0c;AIGC&#xff08;AI Generated Content&#xff09;技术便是其中的佼佼者。本文将带您领略AIGC在AI绘画领域的魅力&#xff0c;并分享一些学习资源和路径&#xff0c;助您在艺术与技术交汇的旅途中更进一步。…

山东省行政执法证照片要求及图像处理方法

在山东省&#xff0c;行政执法证是执法人员身份的重要标识&#xff0c;其照片的规范性对于证件的有效性至关重要。本文将详细介绍山东省行政执法证照片的要求&#xff0c;并提供使用手机相机拍照的实用方法&#xff0c;以确保照片符合标准。 一、山东省行政人员执法证照片拍摄要…

表情迁移大法,LivePortrait 帮你快速处理图片!

LivePortrait 由快手可灵大模型团队开源&#xff0c;主要功能包括从单一图像生成生动动画、精确控制眼睛和嘴唇的动作、处理多个人物肖像的无缝拼接、支持多风格肖像、生成高分辨率动画等。该项目使用的是基于隐式关键点框架的 AI 肖像动画生成框架。它能够将驱动视频的表情和姿…

sql语句的训练2024/9/9

1题 需要看清思路&#xff1a;不是将数据库中的device_id的名字改为user_infors_example&#xff0c;而是在查找的时候&#xff0c;需要将device_id看成user_infors_example来进行查找。 答案 select device_id AS user_infos_example FROM user_profile limit 2 2 当固定查找…

Leangoo敏捷工具在缺陷跟踪(BUG)管理中的高效应用

在开发过程中&#xff0c;缺陷&#xff08;BUG&#xff09;管理一直是项目管理中的一个关键环节。及时发现并修复BUG&#xff0c;不仅能够提高产品质量&#xff0c;还能有效提升团队的工作效率和用户满意度。 在敏捷开发中&#xff0c;快速迭代和频繁交付的特点使得缺陷管理的…

2024.09.04【读书笔记】|如何使用Tombo进行Nanopore Direct RNA-seq(DRS)分析

文章目录 Tombo快速使用介绍模型介绍RNA修饰分析步骤特异性替代碱基检测&#xff08;推荐&#xff09;De novo canonical model comparison ONT全长转录组分析步骤疑难解答Minimap2在比对nanopore直接RNA-seq数据时的最佳实践和参数设置有哪些&#xff1f;featureCounts在进行R…

红米K60U/K50/Note11TPro澎湃OS无法绑定账号解锁BL-不能激活小米账号

小米澎湃OS对于解锁BL&#xff0c;新增了各种限制&#xff0c;早前我们还能使用bypass脚本来实现澎湃OS上绑 定账号成功&#xff0c;但随着澎湃OS七月系统上的推送&#xff0c;旧版的bypass已经彻底失效&#xff0c;并且无法安装 旧版的设置APK来解决问题。此次涉及的机型有红米…

【Java】实体类Javabean的运用案例

文章目录 前言一、定义一个操作类专门处理数据二、代码总结 前言 实体类Javabean的运用案例&#xff0c;现在需要把数据与业务串联起来。 一、定义一个操作类专门处理数据 这里定义了一个叫DogOperator的类&#xff0c;专门用来处理Dog类里面的数据。 解析&#xff1a; 要把…

即时零售,电商平台们的「新战场」?

【潮汐商业评论/原创】 周末宅家的Cindy心血来潮要重启减肥计划&#xff0c;“第一步就是需要一个体脂秤&#xff0c;我要看看现在到底多少斤&#xff0c;以及其他的指标&#xff0c;不知道有没有一两个小时就能送到的&#xff1f;”Cindy边说边打开手机搜了起来。“还真有哎&…

大学英语四六级报名照不通过的原因

大学英语四六级报名照不通过的原因 #英语四六级 #大学英语四六级 #大学英语四六级考试 #英语四六级报名照片 #英语四六级考试报名照片

大数据Flink(一百一十四):PyFlink的作业开发入门案例

文章目录 PyFlink的作业开发入门案例 一、批处理的入门案例 1、示例 2、​​​​​​​​​​​​​​开发步骤 3、参考代码&#xff1a;基于DataStreamAPI编程 二、​​​​​​​​​​​​​​流处理的入门案例 1、​​​​​​​​​​​​​​示例 2、​​​​​…

【树和二叉树的相关定义】概念

1.回顾与概览 2.什么是树型结构 3.树的&#xff08;递归&#xff09;定义与基本术语 3.1树的定义 注意&#xff1a;除了根结点以外&#xff0c;任何一个结点都有且仅有一个前驱 3.2树的其他表示方式 3.3树的基本术语 结点&#xff1a;数据元素以及指向子树的分支根结点:非空…

人员随机分组

如何实现男女比例平均分组&#xff1f; 在团队活动中&#xff0c;合理地将人员分组是一项重要的组织工作&#xff0c;它有助于提高团队合作的效率和质量。云分组小程序提供了一个便捷的解决方案&#xff0c;通过智能算法帮助用户快速实现人员分组。本文将详细介绍如何使用云分组…

考试:软件工程(01)

软件开发生命周期 ◆软件定义时期&#xff1a;包括可行性研究和详细需求分析过程&#xff0c;任务是确定软件开发工程必须完成的总目标&#xff0c; 具体可分成问题定义、可行性研究、需求分析等。 ◆软件开发时期&#xff1a;就是软件的设计与实现&#xff0c;可分成概要设计…

【逐行注释】自适应Q的AUKF|MATLAB代码(附下载链接)

文章目录 逐行注释的说明运行结果自适应UKF介绍实现过程 部分代码各模块解释 逐行注释的说明 每一行都标有中文注释&#xff1a; 是我自己一个字一个字打的&#xff0c;如果有错别字等问题&#xff0c;欢迎指正。 运行结果 三轴的估计值、真值、滤波前的值对比&#xff1a…