Leetcode - 周赛414

news2024/12/23 2:00:54

目录

一,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 ..... n
        int[][] 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.coloradmin.cn/o/2135023.html

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

相关文章

产品密封防水设计技术、工艺标准及实施方案解培训

一、课程背景&#xff1a; 当前智能产品密封防水能力成为电子产品营销的重要卖点&#xff0c;虽然我们不需长期带着某种电子设备在水下工作和生活&#xff0c;意外却会令价值不菲的电子产品瞬间报废。时下智能手表和耳机成了慢跑伴侣&#xff0c;汗水或雨水长期的侵润腐蚀&…

查谷歌流量什么最准确,服务商提供的工具为什么不能用?

查网站的SEO流量&#xff0c;Google Search Console是最准确的工具&#xff0c;因为这就是谷歌官方提供的工具&#xff0c;谷歌这方面没必要造假&#xff0c;GSC能直接展示你的网站在谷歌搜索中的表现&#xff0c;包括点击次数、展示次数、点击率和平均排名。因为这些数据直接来…

项目需求 | MySQL增量备份与恢复的完整操作指南

目录 一、MySql数据库增量备份的工作原理 1、全量备份与增量备份 2、增量备份原理 二、进行增量备份 步骤1&#xff1a;启用二进制日志 使用 SHOW VARIABLES 命令查看二进制日志状态 步骤2&#xff1a;执行增量备份脚本 三、使用增量备份恢复损坏的数据库 步骤1&#…

[数据集][目标检测]男女性别检测数据集VOC+YOLO格式9769张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9769 标注数量(xml文件个数)&#xff1a;9769 标注数量(txt文件个数)&#xff1a;9769 标注…

《程序猿之设计模式实战 · 池化思想》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

春意盎然:SpringBoot在线教育平台设计

第五章 系统实现 5.1用户功能模块 用户点击进入到系统操作界面&#xff0c;可以对首页、个人中心、课程信息管理、我的收藏管理、订单管理等功能模块&#xff0c;个人信息&#xff1a;通过列表可以获取账号、密码、姓名、性别、手机、邮箱、照片、备注并进行修改操作&#xff…

网络药理学:15、草稿暂存区(autodock vina)

TCMSP 韦恩图在线网站 https://bioinfogp.cnb.csic.es/tools/venny/index.html String数据库参数详解&#xff1a;https://www.bilibili.com/video/BV1q64y1k7Zf?p16&vd_sourceaed4c634975918b14b7354ec93ce5389 David数据库可以用基因ID或者基因名。 KEGG数据库使用&am…

大雪纷飞的视频素材去哪里找啊?雪景素材库分享

当冬季的银装素裹覆盖大地&#xff0c;无数抖音创作者便开始寻找那些可以捕捉到大雪纷飞的壮观画面。无论是为了制作节日主题的视频、记录下雪天的活动&#xff0c;还是单纯展示雪的清新美&#xff0c;优质的大雪视频素材都显得尤为重要。如果你正为寻找这类素材而苦恼&#xf…

软件测试面试题,精选100 道,内附答案

精挑细选&#xff0c;整理了100道软件测试面试题&#xff0c;都是非常常见的面试题&#xff0c;篇幅较长&#xff0c;所以只放出了题目&#xff0c;答案在评论区&#xff01; 测试技术面试题 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 2、我现在有…

设计模式篇--抽象工厂模式

/*** 主要思路&#xff1a;先构建一个总工厂&#xff0c;包含许多分工厂&#xff0c;再从分工厂中&#xff0c;取出自己想要的类型的物品*/ public class main {public static void main(String[] args) {FactoryProducer factoryProducer new FactoryProducer();//获取手机工…

计算机网络(六) —— http协议详解

目录 一&#xff0c;预备知识 1.1 关于域名 1.2 关于URL 1.3 urlencode和urldecode 二&#xff0c;关于http 2.1 什么是http 2.2 http协议格式 2.2.1 网络协议栈 2.2.2 http请求协议格式* 2.2.3 http响应协议格式* 三&#xff0c;http细节字段 3.1 http方法 3.2 …

《A++ 敏捷开发》- 26 根与翼

中国社会一直非常强调家庭价值观&#xff0c;希望实现家族的持续传承&#xff0c;家族有族谱&#xff0c;代代相传的关系对每个家庭成员的成长产生深远影响。我们每个人都只是人类进化过程中的短暂过渡。父母普遍希望把最好的东西传承给下一代。然而我们需要问自己&#xff0c;…

【Go】Go语言中延迟函数、函数数据的类型、匿名函数、闭包等高阶函数用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

每日处理250亿个事件,Canva如何应对数据洪流

在这个数据被称为“新石油”的时代&#xff0c;如何有效地处理海量信息流显得尤为重要。作为广受欢迎的设计平台&#xff0c;Canva不仅因其用户友好的界面而备受关注&#xff0c;还因其高效利用Amazon Kinesis管理每日高达250亿个事件而成为热议焦点。让我们深入探讨Canva是如何…

【案例70】invalid secrity token(null)

问题现象 系统登录时提示invalid secrity token(null) 问题分析 排查发现令牌种子没有配置或被人为修改 解决方案 1、登录环境。代码路径下bin下有个sysconfig.bat。左侧选“系统配置”。右侧点“安全”。读取保存一下。 2、或者找一个好用的环境。把ierp/bin下的prop.xml文…

Redis简介、常用命令及优化

文章目录 一、关系数据库​​与非关系型数据库概述1. 关系型数据库2. 非关系型数据库3.关系数据库与非关系型数据库区别 二、Redis简介1.Redis的单线程模式2.Redis 优点3.Redis 缺点 三、安装redis四、Redis 命令工具五、Redis 数据库常用命令六、Redis 多数据库常用命令七、Re…

【算法专题--回文】最长回文子串 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、预备知识 &#x1f95d; 什么回文串 &#xff1f; 四、题目解析 五、总结与提炼 六、共勉 一、前言 最长回文子串 这道题&#xff0c;可以说是--回文专题 --&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高…

哈希表和双向链表实现LRU

LRU&#xff08;Least Recently Used&#xff09;即最近最少使用&#xff0c;是一种内存管理算法。最近在Linux的缓冲区管理也看到了使用LRU算法&#xff0c;即利用哈希表进行 O(1) 复杂度的快速查找&#xff0c;利用双向链表&#xff08;里面的元素是缓冲头&#xff09;对缓冲…

再次进阶 舞台王者 第八季完美童模全球赛代言人【吴浩美】赛场+秀场超燃合集

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少女——吴浩美迎来了她舞台生涯的璀璨时刻。 代言人——吴浩美&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&#xff0c;作为开…

【趣学Python算法100例】兔子产子

问题描述 有一对兔子&#xff0c;从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子&#xff0c;假设所有的兔子都不死&#xff0c;问30个月内每个月的兔子总对数为多少&#xff1f; 题目解析 兔子产子问题是一个有趣的古典数学问题&#xff0c…