题目大意:
arrivalTime
表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime
表示列车延误的小时数。思想:
(arrivalTime + delayedTime) % 24
代码:
class Solution {
public int findDelayedArrivalTime(int arrivalTime, int delayedTime) {
return (arrivalTime + delayedTime) % 24;
}
}
题目大意:
思想:
i
从 1
遍历到 n
,将所有满足 i % k == 0,k = 3, 5, 7
条件的 i
累加即可。代码:
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;
}
}
题目大意:
思想:
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] --
。代码:
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; // 返回答案
}
}
题目大意:
nums[i]
或者 nums[i+1]
两者之一替换成它们的最大公约数。nums
中所有元素都等于 1 的 最少 操作次数。如果无法让数组全部变成 1 ,请你返回 -1 。思想:
代码:
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);
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有