leetcode contest 342
这场周赛算是最近比较简单的周赛了。
6387. 计算列车到站时间
给你一个正整数 arrivalTime
表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime
表示列车延误的小时数。
返回列车实际到站的时间。
注意,该问题中的时间采用 24 小时制。
示例 1:
输入:arrivalTime = 15, delayedTime = 5 |
示例 2:
输入:arrivalTime = 13, delayedTime = 11 |
提示:
1 <= arrivaltime < 24
1 <= delayedTime <= 24
地址
https://leetcode.cn/contest/weekly-contest-342/problems/calculate-delayed-arrival-time/
题意
直接枚举
思路
- 直接计算即可,感觉是最简单的题目了。
- 复杂度分析:
- 时间复杂度:$O(1)$。
- 空间复杂度:$O(1)$。
代码
class Solution { |
6391. 倍数求和
给你一个正整数 n
,请你计算在 [1,n]
范围内能被 3
、5
、7
整除的所有整数之和。
返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。
示例 1:
输入:n = 7 |
示例 2:
输入:n = 10 |
示例 3:
输入:n = 9 |
提示:
1 <= n <= 103
地址
https://leetcode.cn/contest/weekly-contest-342/problems/sum-multiples/
题意
暴力枚举
思路
- 题目太简单了,直接枚举从 $1$ 到 $n$ 之间可以被 $3,5,7$ 其中任意一个元素整除的元素。另外可以通过容斥定理计算也可以。
- 复杂度分析:
- 时间复杂度:$O(n)$,其中 $n$ 为给定的元素。
- 空间复杂度:$O(1)$。
代码
class Solution { |
6390. 滑动子数组的美丽值
给你一个长度为 n
的整数数组 nums
,请你求出每个长度为 k
的子数组的 美丽值 。
一个子数组的 美丽值 定义为:如果子数组中第 x
小整数 是 负数 ,那么美丽值为第 x
小的数,否则美丽值为 0
。
请你返回一个包含 n - k + 1
个整数的数组,依次 表示数组中从第一个下标开始,每个长度为 k
的子数组的 美丽值 。
- 子数组指的是数组中一段连续 非空 的元素序列。
示例 1:
输入:nums = [1,-1,-3,-2,3], k = 3, x = 2 |
示例 2:
输入:nums = [-1,-2,-3,-4,-5], k = 2, x = 2 |
示例 3:
输入:nums = [-3,1,2,-3,0,-3], k = 2, x = 1 |
提示:
n == nums.length
1 <= n <= 105
1 <= k <= n
1 <= x <= k
-50 <= nums[i] <= 50
地址
https://leetcode.cn/contest/weekly-contest-342/problems/sliding-subarray-beauty/
题意
滑动窗口
思路
- 题目的关键在于给定的整数的大小只有 $[-50, 50]$,此时我们可以将每个元素都加上 $50$,则每个元素的范围为 $[0,100]$。此时即转换为可变换的元素了,我们将用数组来统计每个元素的出现的次数,每次滑动窗口时,我们只统计窗口的元素出现的个数,此时我们很快即可在 $[0,100]$ 的区间内找到窗口排名为 $x$ 的元素,此时:
- 如果排名为 $x$ 的元素大于 $50$,则我们直接记为 $0$;
- 如果排名为 $x$ 的元素小于 $50$,则我们直接记为 $50 - value$;
- 复杂度分析:
- 时间复杂度:$O(nU)$,其中 $n$ 为数组的长度, $U$ 表示数组中的最大元素。
- 空间复杂度:$O(U)$,其中 $n$ 为数组的长度, $U$ 表示数组中的最大元素。
代码
class Solution { |
6392. 使数组所有元素变成 1 的最少操作次数
给你一个下标从 0 开始的 正 整数数组 nums
。你可以对数组执行以下操作 任意 次:
- 选择一个满足
0 <= i < n - 1
的下标i
,将nums[i]
或者nums[i+1]
两者之一替换成它们的最大公约数。
请你返回使数组 nums
中所有元素都等于 1
的 最少 操作次数。如果无法让数组全部变成 1
,请你返回 -1
。
两个正整数的最大公约数指的是能整除这两个数的最大正整数。
示例 1:
输入:nums = [2,6,3,4] |
示例 2:
输入:nums = [2,10,6,14] |
提示:
2 <= nums.length <= 50
1 <= nums[i] <= 106
地址
题意
数学
思路
- 题目其实挺简单的,我们仔细观察一下即可发现:
- 如果题目中存在 $1$ 个 $1$,此时剩余所有的元素都与 $1$ 计算并替换为 $1$,此时需要 $n-1$ 次替换即可;
- 如果数组所有元素的最大公约数大于 $1$,则一定不可能将数组中的某个元素变为 $1$;
- 本质上如果我们能够找到最少的操作方法将其中某个元素变为 $1$,则剩余的元素还需要 $n-1$ 次操作即可将其变为 $1$,如果能够将某个元素变为 $1$,如果连续的 $m$ 个元素的最大公约数为 $1$,此时我们一定可以通过 $m$ 次操作将其中一个元素变为 $1$;
- 已经变为 $1$ 的元素我们可以将其剔除掉;
- 复杂度分析:
- 时间复杂度:$O(n^2)$,其中 $n$ 为数组的元素的数目;
- 空间复杂度:$O(1)$。
代码
class Solution { |
欢迎关注和打赏,感谢支持!
- 关注我的博客: http://whistle-wind.com/
- 关注我的知乎:https://www.zhihu.com/people/da-hua-niu
- 关注我的微信公众号: 公务程序猿
扫描二维码,分享此文章