Problem: 100103. 分类求和并作差
📚 题目:给你两个正整数 n 和 m 。
现定义两个整数 num1 和 num2 ,如下所示:
- num1:范围 [1, n] 内所有 无法被 m 整除 的整数之和。
- num1:范围 [1, n] 内所有 无法被 m 整除 的整数之和。
返回整数 num1 - num2 。
示例 1:
输入:n = 5, m = 6
输出:15
示例 2:
输入:n = 10, m = 3
输出:19
✅ 模板:C++
class Solution {
public:int differenceOfSums(int n, int m) {}
};
💡 思路:定义ans 和 res 记录答案,然后根据题目要求遍历数组即可
Code
class Solution
{
public:int differenceOfSums(int n, int m) {int res = 0;int ans = 0;for(int i = 1 ; i <= n ; ++ i){if(i % m == 0) ans += i;else res += i;}return res - ans;}
};
🚩 运行结果如下:
Problem: 100085. 最小处理时间
📚 题目:给你两个正整数 n 和 m 。
你有 n 颗处理器,每颗处理器都有 4 个核心。现有 n * 4 个待执行任务,每个核心只执行 一个 任务。
给你一个下标从 0 开始的整数数组 processorTime ,表示每颗处理器最早空闲时间。另给你一个下标从 0 开始的整数数组 tasks ,表示执行每个任务所需的时间。返回所有任务都执行完毕需要的 最小时间 。
注意:每个核心独立执行任务。
示例 1:
输入:processorTime = [8,10], tasks = [2,2,3,1,8,7,4,5]
输出:16
示例 2:
输入:processorTime = [10,20], tasks = [2,3,1,2,5,8,4,3]
输出:23
✅ 模板:C++
class Solution {
public:int minProcessingTime(vector<int>& processorTime, vector<int>& tasks) {}
};
💡 思路:对数组processorTime 和 数组 tasks 进行sort排序 然后以四为单位找到四个数的最大值存放到新的数组res数组里面,最后根据题意求出最大值ans即可
Code
class Solution
{
public:int minProcessingTime(vector<int>& processorTime, vector<int>& tasks) {sort(processorTime.begin(),processorTime.end());sort(tasks.begin(),tasks.end());vector<int> res;int cnt = 0, ans = 0;for(int i = 0 ; i < tasks.size() ; ++ i){cnt ++;if(tasks[i] > ans)ans = tasks[i];if(cnt == 4){res.push_back(ans);ans = 0;cnt = 0;}}int anser = 0;for(int i = 0 ; i < res.size(); i ++){if(res[i] + processorTime[res.size() - 1 - i] > anser)anser = res[i] + processorTime[res.size() - 1 - i];}return anser;}
};
🚩 运行结果如下:
剩下的两道题我是死活不会写…啊啊啊啊啊啊动态规划 + 脑筋急转弯吧,还是需要多学习