Loading [MathJax]/jax/element/mml/optable/BasicLatin.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 第 342 场周赛

LeetCode 第 342 场周赛

作者头像
浪漫主义狗
发布于 2023-05-01 08:38:13
发布于 2023-05-01 08:38:13
35300
代码可运行
举报
文章被收录于专栏:HAUE_LYS'BlogHAUE_LYS'Blog
运行总次数:0
代码可运行

2651. 计算列车到站时间

题目大意

  • 给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。
  • 返回列车实际到站的时间。
  • 注意,该问题中的时间采用 24 小时制。

思想

  • 签到题
  • 返回 (arrivalTime + delayedTime) % 24

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public int findDelayedArrivalTime(int arrivalTime, int delayedTime) {
        return (arrivalTime + delayedTime) % 24;
    }
}

2652. 倍数求和


题目大意

  • 给你一个正整数 n ,请你计算在 [1,n] 范围内能被 3、5、7 整除的所有整数之和。
  • 返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。

思想

  • 签到题
  • i1 遍历到 n,将所有满足 i % k == 0,k = 3, 5, 7 条件的 i 累加即可。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public int sumOfMultiples(int n) {
        int sum = 0;
        for(int i = 1; i <= n; i ++){
            if(i % 3 == 0 || i % 5 == 0 || i % 7 == 0) sum += i;
        }
        return sum;
    }
}

2653. 滑动子数组的美丽值


题目大意

  • 给你一个长度为 n 的整数数组 nums ,请你求出每个长度为 k 的子数组的 美丽值 。
  • 一个子数组的 美丽值 定义为:如果子数组中第 x 小整数 是 负数 ,那么美丽值为第 x 小的数,否则美丽值为 0 。
  • 请你返回一个包含 n - k + 1 个整数的数组,依次 表示数组中从第一个下标开始,每个长度为 k 的子数组的 美丽值 。

思想

  • 滑动窗口
  • 将所有的数添加偏移量 base = 50,以使得所有当前窗口中出现过的数 i 可以利用 vis[i] 记录其数量;
  • 先将前 k - 1 个数加入 vis[]
  • i = k - 1 开始,每次循环将 nums[i] 统计到 vis 中,即 vis[nums[i] + base] ++
  • 由于 nums[i] 的范围很小,遍历 vis[] 累加窗口中出现的数的数量,保存在 cnt 中;
  • cnt >= x 时,说明当前遍历到的数即为排序中第 x 小的数;
  • 判断减去偏移量 base 后将对应美丽值返回。
  • 窗口向后移动,将左边界的 nums[i - k + 1] 移出窗口,即 vis[nums[i - k + 1] + base] --

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public int[] getSubarrayBeauty(int[] nums, int k, int x) {
        int n = nums.length;
        int[] res = new int[n - k + 1];  // 答案数组
        int[] vis = new int[1010];       // 记录窗口中存在数的数量
        final int base = 50;             // 偏移量
        for(int i = 0; i < k - 1; i ++) vis[nums[i] + base] ++;  // 初始化窗口
        for(int i = k - 1; i < n; i ++){
            int cnt = 0;  // 记录数量
            vis[nums[i] + base] ++;          // 移入右边界
            for(int j = 0; j < 110; j ++){
                cnt += vis[j];   
                if(cnt >= x){
                    res[i - k + 1] = j - base < 0 ? j - base : 0;
                    break;
                }
            }
            vis[nums[i - k + 1] + base] --;  // 移出左边界
        }
        return res;  // 返回答案
    }
}

2654. 使数组所有元素变成 1 的最少操作次数


题目大意

  • 给你一个下标从 0 开始的 正 整数数组 nums 。你可以对数组执行以下操作 任意 次:
  • 选择一个满足 0 <= i < n - 1 的下标 i ,将 nums[i] 或者 nums[i+1] 两者之一替换成它们的最大公约数。
  • 请你返回使数组 nums 中所有元素都等于 1 的 最少 操作次数。如果无法让数组全部变成 1 ,请你返回 -1 。

思想

  • 最大公约数及其性质;
  • 如果一个数列中所有数的最大公约数为 g,那么无论如替换数列中任意的两个数为其最大公约数,都无法操作出 h 使得 h<g
  • 证明如下: 设原数列为 a1,a2,...,an,最大公约数为 g,操作后得到的数列为 b1,b2,...,bn,最大公约数为 h,其中 h<gb1=h×k1,其中 k1 为一个整数。则可以将 。 其中 是一个整数,故 一定整除 ,即 的公约数。 同理,根据操作规则, 的公约数也是 ,以此类推,即 的公约数都是 。 由于 一定不能整除 ,即将 替换为 的操作一定不能得到最大公约数为 且小于 的数列
  • 若可以通过操作得到: 当数列存在 时,需要操作所有非 的元素; 当不存在 时,需要找到一个最短的连续的子数组,使得通过操作得到

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public int minOperations(int[] nums) {
        int n = nums.length;
        int t = nums[0];
        int cnt = t == 1 ? 1 : 0;  // 判断第一个是否为 1
        for(int i = 1; i < n; i ++){
            t = gcd(t, nums[i]);
            if(nums[i] == 1) cnt ++;  // 记录 1 的元素个数
        }
        if(t != 1) return -1;  // t != 1 说明不成立
        if(cnt != 0) return n - cnt;  // 存在 1,最少操作 n - cnt 次
        int res = n;  // 连续的子数组的长度
        for (int i = 0; i < n; i ++) {
            int tt = nums[i];
            for (int j = i + 1; j < n; j ++) {  // 遍历查找
                tt = gcd(tt, nums[j]);
                if (tt == 1) {  // 通过操作找到了可以变为 1 的连续子数组
                    res = Math.min(res, j - i + 1);  // 更新最短长度
                    break;
                }
            }
        }
        return res + n - 2;  // 去除掉连续子数组的两个边界操作
    }

    private int gcd(int n, int m){
        return n % m == 0 ? m : gcd(m, n % m);
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-4-26 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
惊呆了,LeetCode居然挂了……LeetCode周赛第281场解析
不知道大家参加了上周日的LeetCode周赛没有,发生了一件活久见的事,LeetCode官网居然挂了,不仅是中国区挂了,而是全站都挂了,国际服的竞赛也进不去了……过了好久才恢复。
TechFlow-承志
2022/09/22
6780
惊呆了,LeetCode居然挂了……LeetCode周赛第281场解析
第十五届蓝桥杯C++B组省赛
按照题目描述来说,会议有五十人,如果不加任何限制条件,这五十个人两两握手的次数是:
用户11305458
2024/10/14
2820
第十五届蓝桥杯C++B组省赛
4. 基础数学初识
输出格式 共 n 行,其中第 i 行输出第 i 个正整数 ai 是否为质数,是则输出 Yes,否则输出 No。
浪漫主义狗
2022/09/14
9910
4. 基础数学初识
2022_HAUE_计算机学院暑期培训——扩展欧几里得算法
求 100 和18 两个正整数的最大公约数,用欧几里得算法,是这样进行的: 100 / 18 = 5 (余 10) 100%8=10 18 / 10= 1(余8) 18%10=8 10 / 8 = 1(余2) 10%8=2 8 / 2 = 4 (余0) 8%2=0 至此,最大公约数为2 以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 100 和 18 的最大公约数2。
浪漫主义狗
2022/09/16
7270
2022_HAUE_计算机学院暑期培训——扩展欧几里得算法
1034 有理数四则运算 (20 分)
输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。
可爱见见
2019/09/19
7190
小小GCD、LCM拿下拿下
GCD、LCM是算法当中的基础之基础,分别对应最大公约数、最小公倍数,在算法竞赛中涉及到的概率也是比较高的,GCD、LCM在小学时就涉及到了求法,本篇将给大家详解GCD、LCM这两个函数,并且提供最简单的模板,在考察时,直接背上即可。
摆烂小白敲代码
2024/09/23
1280
小小GCD、LCM拿下拿下
LeetCode周赛302,这也太卷了,20分钟ak也只有300名……
第302场的LeetCode周赛,由千挂科技赞助。进入前100名的可以获得简历内推机会。
TechFlow-承志
2022/09/21
2850
LeetCode周赛302,这也太卷了,20分钟ak也只有300名……
【LeetCode第 161 场周赛】回顾
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
3760
LeetCode 第 46 场双周赛题解
当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串。
宫水三叶的刷题日记
2021/02/26
5340
LeetCode周赛255 状态压缩DP与集合问题
边奶娃边刷题,最后一题不会,所以本次周赛重点讲一下第三题,使用位压缩DP解组合问题。
ACM算法日常
2021/09/07
1K0
精读《算法题 - 统计可以被 K 整除的下标对数目》
今天我们看一道 leetcode hard 难度题目:统计可以被 K 整除的下标对数目。
黄子毅
2023/09/01
2750
精读《算法题 - 统计可以被 K 整除的下标对数目》
一道公约数的难题
本次周赛最后一题主要考察对公约数的使用。 题意:给一个数组,任意两个数字相乘,乘积结果可以被k整除的个数。 例子: 输入:nums = [1,2,3,4,5], k = 2 输出:7 暴力思路 这个题目如果使用暴力解法会超时,暴力解法就是遍历任意两个数字,计算结果能否整除k。复杂度。 优化思路 假设,任意两个数字x、y,如果,那么y有什么特点呢? 显然,我们可以求出k和x的最大公约数6,标准库有gcd函数可以直接求出结果。,也就是说,y只要是4的整数倍就可以和x结合起来被k整除。 有一个特殊情况是,如果,,
ACM算法日常
2022/03/04
2560
每日算法刷题Day11-最大公约数、数组去重
输入两个整数 a 和 b,请你编写一个函数,int gcd(int a, int b), 计算并输出 a 和 b 的最大公约数。
timerring
2022/09/27
4420
每日算法刷题Day11-最大公约数、数组去重
LeetCode周赛301,离大谱,手速场掉分,质量场掉大分……
今天是周一,我们来看下第301场的LeetCode周赛。这一场由中国银联赞助。前500名都有内推的机会,离谱的是老梁我刚好第502名……
TechFlow-承志
2022/09/21
3540
LeetCode周赛301,离大谱,手速场掉分,质量场掉大分……
《算法和数据结构》算法零基础五十题讲解[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说《算法和数据结构》算法零基础五十题讲解[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/07/29
5770
《算法和数据结构》算法零基础五十题讲解[通俗易懂]
算法基础学习笔记——⑭欧拉函数\快速幂\扩展欧几里得算法\中国剩余定理
在C语言中,可以使用算法来计算欧拉函数(Euler's Totient Function)。欧拉函数,也被称为φ函数,用于计算小于或等于给定数字n的正整数中与n互质的数的个数。
命运之光
2024/03/20
2340
算法基础学习笔记——⑭欧拉函数\快速幂\扩展欧几里得算法\中国剩余定理
河南工程学院2022级新生周赛(五)题解
众嗦粥汁,HF 最近天天泡在实验室里做他的智能小车车,但在调试的时候发现控制转向和行进的指令搞混了。这种小事对他来说太简单了,用他的原话说就是:"有手就行",于是他就懒得继续做下去了。
浪漫主义狗
2022/10/31
3800
河南工程学院2022级新生周赛(五)题解
LeetCode 1819. 序列中不同最大公约数的数目
例如,序列 [4,6,16] 的最大公约数是 2 。 数组的一个 子序列 本质是一个序列,可以通过删除数组中的某些元素(或者不删除)得到。
Michael阿明
2021/09/06
3790
2025-05-25:最大公约数相等的子序列数量。用go语言,给定一个整数数组 nums,需要计算满足以下条件的非空子序列对 (
2025-05-25:最大公约数相等的子序列数量。用go语言,给定一个整数数组 nums,需要计算满足以下条件的非空子序列对 (seq1, seq2) 的数量:
福大大架构师每日一题
2025/05/25
520
2025-05-25:最大公约数相等的子序列数量。用go语言,给定一个整数数组 nums,需要计算满足以下条件的非空子序列对 (
LeetCode 周赛上分之旅 #38 结合排序不等式的动态规划
其实就是将 purchaseAmount 向最近的 10 的倍数四舍五入,再用 100 减去它。
用户9995743
2023/08/18
2660
LeetCode 周赛上分之旅 #38 结合排序不等式的动态规划
推荐阅读
相关推荐
惊呆了,LeetCode居然挂了……LeetCode周赛第281场解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档