Leetcode - 周赛436

目录

  • 一、3446. 按对角线进行矩阵排序
  • 二、3447. 将元素分配给有约束条件的组
  • 三、3448. 统计可以被最后一个数位整除的子字符串数目
  • 四、3449. 最大化游戏分数的最小值

一、3446. 按对角线进行矩阵排序

题目链接
在这里插入图片描述
本题可以暴力枚举,在确定了每一个对角线的第一个元素下标 ( i , j ) (i,j) (i,j) 后,下一个元素的下标就是 ( i + 1 , j + 1 ) (i+1,j+1) (i+1,j+1),即只要同时 i i i++, j j j++就可以枚举该对角线上的元素了。

这里再介绍一种更加简单的做法,我们可以定义 k = m − ( j − i ) k=m-(j-i) k=m(ji),画个图理解一下:
在这里插入图片描述

此时,如果我们枚举 j j j,那么更据上述公式 i = j + k − m , j = m + i − k i = j + k - m,j=m+i-k i=j+kmj=m+ik,又因为 i ∈ [ 0 , n − 1 ] , j ∈ [ 0 , m − 1 ] i\in [0,n-1],j\in [0, m-1] i[0,n1]j[0,m1],所有 j ∈ [ m a x ( m − k , 0 ) , m i n ( m + n − 1 − k , m − 1 ) ] j\in [max(m-k,0),min(m+n-1-k,m-1)] j[max(mk0)min(m+n1km1)]

代码如下:

class Solution {public int[][] sortMatrix(int[][] g) {int n = g.length, m = g[0].length;int[][] ans = new int[n][m];// k = m - (j - i)// j = m - k + i (i=[0,n-1],j=[0,m-1])// i = k + j - mfor(int k=1; k<n+m; k++){int minJ = Math.max(m - k, 0);int maxJ = Math.min(m - k + n - 1, m - 1);List<Integer> res = new ArrayList<>();for(int j=minJ; j<=maxJ; j++){res.add(g[k+j-m][j]);}if(n-k>0) Collections.sort(res);else Collections.sort(res, (x,y)->y-x);for(int j=minJ, i=0; j<=maxJ; j++){ans[k+j-m][j] = res.get(i++);}}return ans;}
}

二、3447. 将元素分配给有约束条件的组

题目链接
在这里插入图片描述
本题就是一个调和级数的问题,直接枚举数组 e l e m e n t s elements elements 中的元素 e l e m e n t s [ j ] elements[j] elements[j],再枚举每个元素及其倍数 y y y,记录 y y y 对应的下标 j j j(由于枚举数组的时候从前往后遍历,所以这里的小标已经是最小的了)。如果 y y y 被枚举过,直接 c o n t i n u e continue continue。最后枚举 a s s i g n e d assigned assigned 数组,给其中的每个元素分配对应的 j j j,没有赋值为 − 1 -1 1.

代码如下:

class Solution {public int[] assignElements(int[] g, int[] e) {int n = g.length;int mx = 0;for(int x : g){mx = Math.max(x, mx);}int[] cnt = new int[mx+1];Arrays.fill(cnt, -1);//O(nlogn)for(int i=0; i<e.length; i++){int x = e[i];if(x > mx || cnt[x] != -1) continue;for(int y=x; y<=mx; y+=x){if(cnt[y] != -1) continue;cnt[y] = i;}}int[] ans = new int[n];for(int i=0; i<n; i++){ans[i] = cnt[g[i]];}return ans;}
}

三、3448. 统计可以被最后一个数位整除的子字符串数目

题目链接
在这里插入图片描述
本题主要涉及到取模运算的一个知识点: ( a ∗ 10 + b ) % m = ( a % m ∗ 10 + b ) % m (a*10+b)\%m=(a\%m*10+b)\%m (a10+b)%m=(a%m10+b)%m,对于 s [ i ] s[i] s[i] 来说,不需要知道 { s [ 0 : i ] , s [ 1 : i ] , s [ 2 : i ] , . . . } \{s[0:i],s[1:i],s[2:i],...\} {s[0:i],s[1:i],s[2:i]...} 这些数的具体数值,只需要知道它们 % j \%j %j 的值就行( j ∈ [ 1 , 9 ] j\in[1,9] j[1,9])。这样就大大降低它的时间复杂度,可以使用数组 f [ n + 1 ] [ i ] [ j ] f[n+1][i][j] f[n+1][i][j] 统计以 s [ n ] s[n] s[n] 结尾的数中, % i = j \%i=j %i=j 的元素个数。

代码如下:

class Solution {//(a * 10 + b) % m//(a % m * 10 + b) % mpublic long countSubstrings(String s) {long ans = 0;int n = s.length();long[][] f = new long[10][9];//f[i][j]: %i 且 %i 的值为 j 的元素个数for(int i=0; i<n; i++){int x = s.charAt(i) - '0';long[][] t = new long[10][9];for(int j=1; j<10; j++){t[j][x%j] = 1;for(int k=0; k<j; k++){int y = k * 10 + x;t[j][y%j] += f[j][k];}}f = t;if(x == 0) continue;ans += f[x][0];}return ans;}
}

四、3449. 最大化游戏分数的最小值

题目链接
在这里插入图片描述
本题求最小值最大,可以判断是二分,再看是否存在单调性,对于本题来说,如果最小值越小,它需要的操作次数越少,就更可能 ≤ m \leq m m;最小值越大,它需要的操作次数越多,就更可能 > m > m >m。具有单调性,可以用二分来做。

接下来就是写 c h e c k ( ) check() check() 方法,即判断二分的答案 m i d mid mid,能否在 m m m 次操作之内使得最小值 ⩾ m i d \geqslant mid mid。这里有一个结论:对于任何一种左右横跳的移动路径,都可以将其转换成相邻两个数之间的移动路径。对于每一个 p = p o i n t s [ i ] p = points[i] p=points[i] 来说,至少需要移动到 i i i k = ( m i d − 1 ) / p k=(mid-1)/p k=(mid1)/p 次才能 ⩾ m i d \geqslant mid mid,由于它每移动 2 次才能再次回到 i i i 点,所以需要操作 1 + ( k − 1 ) ∗ 2 1+(k-1)*2 1+(k1)2 次( 从 i − 1 到 i 需要 1 次,剩下在 i 和 i + 1 之间左右横跳 从i-1到i需要1次,剩下在i和i+1之间左右横跳 i1i需要1次,剩下在ii+1之间左右横跳),对于 i + 1 i+1 i+1 点来说,在计算 i i i 点时就已经操作了 p r e = k − 1 pre=k-1 pre=k1 次,所以需要额外减去 p r e pre pre。最终判断 m ≥ 0 \geq 0 0

代码如下:

class Solution {public long maxScore(int[] points, int m) {int n = points.length;int mn = points[0];for(int x : points){mn = Math.min(x, mn);}long l = 1, r = (long)(m+1) / 2 * mn;while(l <= r){long mid = (l + r) >>> 1;if(check(mid, points, m)){l = mid + 1;}else{r = mid - 1;}}return l - 1;}boolean check(long low, int[] p, int m){int n = p.length;int pre = 0;for(int i=0; i<n; i++){int k = (int)((low - 1) / p[i]) + 1 - pre;if(i == n - 1 && k <= 0) break;if(k < 1) k = 1;//此时已经满足条件,但仍需使用一个操作从 i-1 移动到 im -= 2 * k - 1;if(m < 0) return false;pre = k - 1;}return true;}
}

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

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

相关文章

玩转SpringCloud Stream

背景及痛点 现如今消息中间件(MQ)在互联网项目中被广泛的应用&#xff0c;特别是大数据行业应用的特别的多&#xff0c;现在市面上也流行这多个消息中间件框架&#xff0c;比如ActiveMQ、RabbitMQ、RocketMQ、Kafka等&#xff0c;这些消息中间件各有各的优劣&#xff0c;但是想…

解决 Mac 只显示文件大小,不显示目录大小

前言 在使用 mac 的时候总是只显示文件的大小&#xff0c;不显示文件夹的大小&#xff0c;为了解决问题可以开启“计算文件夹”。 步骤 1.进入访达 2.工具栏点击“显示”选项&#xff0c;点击 “查看显示选项” 3.勾选 显示“资源库"文件夹 和 计算所有大小 或者点击…

STM32 定时器产生定周期方法

目录 背景 程序 第一步、使能PCLK1外设时钟​编辑 第二步、时基单元配置 第三步、配置NVIC&#xff08;设置定时中断优先级&#xff09;​编辑 第四步、使能溢出中断 第五步、使能定时器 第六步、填写中断处理函数&#xff08;ISR&#xff09; 背景 在单片机开发当中&…

【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习

文章目录 1、简介2、主要改进点3、两个重要观点4、四阶段后训练详细步骤4.1 冷启动4.2 推理导向的强化学习4.3 拒绝采样和有监督微调4.4 针对所有场景的强化学习 5、蒸馏与强化学习对比6、评估6.1 DeepSeek-R1 评估6.2 蒸馏模型评估 7、结论8、局限性与未来方向 1、简介 DeepS…

Compose常用UI组件

Compose常用UI组件 概述Modifier 修饰符常用Modifier修饰符作用域限定Modifier Modifier 实现原理Modifier.Element链的构建链的解析 常用基础组件文字组件图片组件按钮组件选择器对话框进度条 常用布局组件线性布局帧布局 列表组件 概述 Compose 预置了很多基础组件&#xff…

Ansys EMC Plus:HIRF 与飞机耦合演示

在本篇博文中&#xff0c;我们将深入探讨 EMC Plus 高强度辐射场 (HIRF) 与软件示例中提供的飞机演示的耦合。本概述将指导您完成整个工作流程&#xff0c;从设置问题空间到基本后处理&#xff0c;包括材料属性分配和创建探针。 概述 在本演示中&#xff0c;下图所示的预先简化…

DeepSeek + Mermaid编辑器——常规绘图

下面这张图出自&#xff1a;由清华大学出品的 《DeepSeek&#xff1a;从入门到精通》。 作为纯文本生成模型&#xff0c;DeepSeek虽不具备多媒体内容生成接口&#xff0c;但其开放式架构允许通过API接口与图像合成引擎、数据可视化工具等第三方系统进行协同工作&#xff0c;最终…

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判&#xff08;入侵检测&#xff09;​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…

基于levmar(Levenberg-Marquardt 非线性最小二乘优化库)的椭圆拟合

1. 包含必要的头文件 #include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> #include <vector> #include <cmath>2. 定义生成椭圆点的函数 编写一个函数&#xff0c;接受椭圆的中心坐标、长轴半径、短…

Fastgpt学习(5)- FastGPT 私有化部署问题解决

1.☺ 问题描述&#xff1a; Windows系统&#xff0c;本地私有化部署&#xff0c;postgresql数据库镜像日志持续报错" data directory “/var/lib/postgresql/data” has invalid permissions "&#xff0c;“ DETAIL: Permissions should be urwx (0700) or urwx,gr…

基于SpringBoot+vue粮油商城小程序系统

粮油商城小程序为用户提供方便快捷的在线购物体验&#xff0c;包括大米、面粉、食用油、调味品等各种粮油产品的选购&#xff0c;用户可以浏览商品详情、对比价格、下单支付等操作。同时&#xff0c;商城还提供优惠活动、积分兑换等福利&#xff0c;让用户享受到更多实惠和便利…

Python编程之数据分组

有哪些方式可以进行数据分组利用Pandas库进行分组使用itertools库的groupby分组操作构建Python字典方式实现(小规模数据,不适用数量特别大的情况,不需要依赖其它python库)利用NumPy的groupby函数分组操作利用Python的Dask库提供的函数进行分组下面看一个如何去实现坐标数据…

【Linux】认识协议、Mac/IP地址和端口号、网络字节序、socket套接字

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、初识协议2、Mac、IP地址3、端口号4、网络字节序5、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计算机之间能…

ubuntu 安装docker

ubuntu 安装docker 官网地址 https://docs.docker.com/engine/install/ubuntu/ 尽量根据官网的来&#xff0c;网上找的很多都是一大堆各种报错 卸载旧版本 新机器不需要操作 卸载的非官方包是&#xff1a; docker.iodocker-composedocker-compose-v2docker-docpodman-docker…

环境变量2

目录 环境变量PATH 如何改变PATH 我们今天继续来学习环境变量2&#xff01;&#xff01;&#xff01; 环境变量PATH PATH的作用是知道命令的搜索路径&#xff0c;我们都知道Linux上的命令行指令&#xff0c;ll&#xff0c;pwd什么的为什么我们写出来系统就知道是什么并且运…

网络安全中的机器学习

当涉及到网络安全时&#xff0c;技术一直是保护系统免受攻击和数据泄露的关键。在这篇论文中&#xff0c;我将介绍一些当前在网络安全领域使用的关键技术&#xff0c;包括加密&#xff0c;身份验证和防火墙。 首先&#xff0c;加密是网络安全中最常见的技术之一。加密是指使用算…

sass报错:[sass] Undefined variable. @import升级@use语法注意事项

今天创建vue3项目&#xff0c;迁移老项目代码&#xff0c;使用sass的时候发现import语法已经废弃&#xff0c;官方推荐使用use替换。 这里我踩了一个坑找半天的问题&#xff0c;原因是sass升级到1.85之后 定义变量前加上 - 就是表示变量私有&#xff0c;即使使用use导出 在新的…

嵌入式经常用到串口,如何判断串口数据接收完成?

说起通信&#xff0c;首先想到的肯定是串口&#xff0c;日常中232和485的使用比比皆是&#xff0c;数据的发送、接收是串口通信最基础的内容。这篇文章主要讨论串口接收数据的断帧操作。 空闲中断断帧 一些mcu&#xff08;如&#xff1a;stm32f103&#xff09;在出厂时就已经在…

激光雷达YDLIDAR X2 SDK安装

激光雷达YDLIDAR X2 SDK安装 陈拓 2024/12/15-2024/12/19 1. 简介 YDLIDAR X2官方网址https://ydlidar.cn/index.html‌YDLIDAR X2 YDLIDAR X2是一款高性能的激光雷达传感器&#xff0c;具有以下主要特点和规格参数‌&#xff1a; ‌测距频率‌&#xff1a;3000Hz ‌扫描频…

deepseek本地调用

目录 1.介绍 2.开始调用 2.1模型检验 2.2 通过url调用 3.总结 1.介绍 这篇博客用来教你如何从本地调用ollama中deepseek的模型接口&#xff0c;直接和deepseek进行对话。 2.开始调用 2.1模型检验 首先要保证ollama已经安装到本地&#xff0c;并且已经下载了deepseek模型…