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−(j−i),画个图理解一下:

此时,如果我们枚举 j j j,那么更据上述公式 i = j + k − m , j = m + i − k i = j + k - m,j=m+i-k i=j+k−m,j=m+i−k,又因为 i ∈ [ 0 , n − 1 ] , j ∈ [ 0 , m − 1 ] i\in [0,n-1],j\in [0, m-1] i∈[0,n−1],j∈[0,m−1],所有 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(m−k,0),min(m+n−1−k,m−1)]。
代码如下:
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 (a∗10+b)%m=(a%m∗10+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=(mid−1)/p 次才能 ⩾ m i d \geqslant mid ⩾mid,由于它每移动 2 次才能再次回到 i i i 点,所以需要操作 1 + ( k − 1 ) ∗ 2 1+(k-1)*2 1+(k−1)∗2 次( 从 i − 1 到 i 需要 1 次,剩下在 i 和 i + 1 之间左右横跳 从i-1到i需要1次,剩下在i和i+1之间左右横跳 从i−1到i需要1次,剩下在i和i+1之间左右横跳),对于 i + 1 i+1 i+1 点来说,在计算 i i i 点时就已经操作了 p r e = k − 1 pre=k-1 pre=k−1 次,所以需要额外减去 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;}
}
相关文章:
Leetcode - 周赛436
目录 一、3446. 按对角线进行矩阵排序二、3447. 将元素分配给有约束条件的组三、3448. 统计可以被最后一个数位整除的子字符串数目四、3449. 最大化游戏分数的最小值 一、3446. 按对角线进行矩阵排序 题目链接 本题可以暴力枚举,在确定了每一个对角线的第一个元素…...
【pytest】编写自动化测试用例命名规范README
API_autoTest 项目介绍 1. pytest命名规范 测试文件: 文件名需要以 test_ 开头或者以 _test.py 结尾。例如,test_login.py、user_management_test.py 这样的命名方式,pytest 能够自动识别并将其作为测试文件来执行其中的测试用例。 测试类…...
Compose常用UI组件
Compose常用UI组件 概述Modifier 修饰符常用Modifier修饰符作用域限定Modifier Modifier 实现原理Modifier.Element链的构建链的解析 常用基础组件常用布局组件列表组件 概述 Compose 预置了很多基础组件,如 Button,TextField,TopAppBar等&a…...
斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)
文章目录 引言递归与动态规划的对比递归解法的初探动态规划的优雅与高效自顶向下的记忆化搜索自底向上的迭代法 性能分析与比较小结 引言 斐波那契数列,这一数列如同一条无形的丝线,穿越千年时光,悄然延续其魅力。其定义简单而优美ÿ…...
Hackthebox- Season7- Titanic 简记 [Easy]
简记 ip重定向到 http://titanic.htb,先添加hosts 收集子域名 wfuzz -c -u http://titanic.htb/ -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -H Host:FUZZ.titanic.htb --hl 9 ******************************************************** * Wfu…...
Sa-Token 根据官方文档简单实现登录认证的示例
Sa-Token 根据官方文档实现登录鉴权测试 功能实现步骤依赖配置文件启动类创建 controller启动项目测试不用密码登录查看cookie状态 密码登录查看cookie状态 修改token名称 Apipost 测试无 cookie 模式【使用 token】后端将 token 返回到前端修改代码:测试࿱…...
rustdesk编译修改名字
最近,我用Rust重写了一个2W行C代码的linux内核模块。在此记录一点经验。我此前没写过内核模块,认识比较疏浅,有错误欢迎指正。 为什么要重写? 这个模块2W行代码量看起来不多,却在线上时常故障,永远改不完。…...
BS5852英国家具防火安全条款主要包括哪几个方面呢?
什么是BS5852检测? BS5852是英国针对家用家具的强制性安全要求,主要测试家具在受到燃烧香烟和火柴等火源时的可燃性。这个标准通常分为四个部分进行测试,但实际应用中主要测试第一部分和第二部分,包括烟头测试和利用乙炔火焰模拟…...
【运维】源码编译安装cmake
背景: 已经在本地源码编译安装gcc/g,现在源码安装cmake 下载源码 下载地址:CMake - Upgrade Your Software Build System 安装步骤: ./bootstrap --prefix/usr/local/cmake make make install 错误处理 1、提示找不到libmpc.…...
检测网络安全漏洞 工具
实验一的名称为信息收集和漏洞扫描 实验环境:VMware下的kali linux2021和Windows7 32,网络设置均为NAT,这样子两台机器就在一个网络下。攻击的机器为kali,被攻击的机器为Windows 7。 理论知识记录: 1.信息收集的步骤 2.ping命令…...
frameworks 之 Activity添加View
frameworks 之 Activity添加View 1 LaunchActivityItem1.1 Activity 创建1.2 PhoneWindow 创建1.3 DecorView 创建 2 ResumeActivityItem 讲解 Activity加载View的时机和流程 涉及到的类如下 frameworks/base/core/java/android/app/Activity.javaframeworks/base/services/cor…...
UWB技术中的两种调制方式:PPM与PAM
Ultra-Wideband (UWB) 技术以其低功耗、宽频谱和高精度定位的特点,广泛应用于物联网(IoT)、智能家居、资产追踪和无线通信等领域。在UWB中,信号的调制方式对于数据传输的效率和精度起着至关重要的作用。本文将深入探讨UWB中常用的…...
达梦:用户和模式
目录标题 数据库管理系统与用户权限管理**四权分立****用户管理与权限划分****用户管理界面与权限控制****用户创建与管理****实操**1. **默认创建用户与模式**:2. **用户权限和角色分配**:3. **命令行管理用户与角色**:4. 模式也可以创建 **…...
23. AI-大语言模型-DeepSeek
文章目录 前言一、DeepSeek是什么1. 简介2. 产品版本3. 特征4. 地址链接5. 三种访问方式1. 网页端和APP2. DeepSeek API 二、DeepSeek可以做什么1. 应用场景2. 文本生成1. 文本创作2. 摘要与改写3. 结构化生成 3. 自然语言理解与分析1. 语义分析2. 文本分类3. 知识推理 4. 编程…...
Spring-GPT智谱清言AI项目(附源码)
一、项目介绍 本项目是Spring AI第三方调用整合智谱请言(官网是:https://open.bigmodel.cn)的案例,回答响应流式输出显示,这里使用的是免费模型,需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…...
计算机网络(涵盖OSI,TCP/IP,交换机,路由器,局域网)
一、网络通信基础 (一)网络通信的概念 网络通信是指终端设备之间通过计算机网络进行的信息传递与交流。它类似于现实生活中的物品传递过程:数据(物品)被封装成报文(包裹),通过网络…...
云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色
一、Ansible-playbook实战 1.Ansible-playbook安装软件 bash #编写yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #检查playbook的语法 [rootansible ansible]…...
《运维工程师如何利用DeepSeek实现智能运维:分级实战指南》
目录 智能运维革命:DeepSeek带来的范式转变DeepSeek核心运维能力全景解析分级实战场景与解决方案 3.1 初级工程师:自动化运维入门3.2 中级工程师:复杂系统诊断与优化3.3 高级工程师:架构级智能运维典型项目案例深度剖析 4.1 金融系统全链路监控体系构建4.2 电商大促资源弹性…...
windows事件倒计时器与提醒组件
widgets 这是桌面组件前端开源组件,作者称:项目还在持续完善中,目前包含键盘演示、抖音热榜、喝水提醒、生日列表、待办事项、倒计时、灵动通知、打工进度等多个组件 有vue编程能力的可以自己做组件 百度网盘 夸克网盘 桌面组件 | Ca…...
Mac OS JAVA_HOME设置
个人博客地址:Mac OS JAVA_HOME设置 | 一张假钞的真实世界 在MacOS上使用DMG文件安装了Jdk8 之后,在默认路径下找不到JDK的HOME路径: $ which java /usr/bin/java $ ls -l /usr/bin/java lrwxr-xr-x 1 root wheel 74 12 6 2015 /usr/b…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
