力扣
一.处理用时最长的那个任务的员工
1.原题链接:力扣
2.解题思路:
先开个数组arr用来存储各员工处理任务所花费的时长,然后再遍历数组arr,找出最大时长用变量zhong存储,再遍历找出等于最大时长的时间,返回logs[i][0]即可。
3.参考代码:
class Solution {
public:
int hardestWorker(int n, vector<vector<int>>& logs) {
int m = logs.size();
vector<int>arr(m);
int i;
arr[0] = logs[0][1];
for(int i = 1; i < m; i++){
arr[i] = logs[i][1] - logs[i - 1][1];
}
int index = 0;
int zhong = 0;
for(int i = 0; i < m - 1; i++){
index = max(arr[i], arr[i + 1]);
if(index > zhong)zhong = index;
}
int miN = 10000;
for(int i = 0; i < m; i++){
if(zhong == arr[i])
miN = min(miN, logs[i][0]);
}
return miN;
}
};
二.找出前缀异或的原始数组
1.原题链接:力扣
2.解题思路:
先将pref[0]赋值给arr[0],从i = 1开始,arr[i] = pref[i - 1] ^ pref[i],返回arr即可;
3.参考代码:
class Solution {
public:
vector<int> findArray(vector<int>& pref) {
int n = pref.size();
vector<int>arr(n);
arr[0] = pref[0];
for(int i = 1; i < n; i++){
arr[i] = pref[i - 1] ^ pref[i];
}
return arr;
}
};
AcWing
一.最小值
1.原题链接:4624. 最小值 - AcWing题库
2.解题思路:
输出min(min(a, b), (a + b) / 3)即可
3.参考代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int a, b, x;
cin >> a >> b;
x = (a + b) / 3;
cout << min(min(a, b), x) << endl;
}
return 0;
}
二.压缩文件
1.原题链接:4625. 压缩文件 - AcWing题库
2.解题思路:
贪心,读入每个物体的压缩之前的体积和压缩之后的体积。用一个LL的数据记录总体积,一定要开longlong,然后根据压缩之后的体积跟压缩之前的体积的差值从大到小排序,按照这个次序去压缩,直到其他物品可以不压缩就能直接放进去,就输出计数,否则的话就输出-1;
3.参考代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5+10;
int w[N];
int n, m;
int main(){
cin >> n >> m;
LL sum = 0;
for(int i = 0; i < n; i++){
int a, b;
cin >> a >> b;
sum += a;
w[i] = a-b ;
}
sort(w, w + n, greater<int>());
if(sum <= m)cout << 0;
else{
for(int i = 0;i<n;i++){
sum -= w[i];
if(sum <= m){
cout << i + 1;
return 0;
}
}
cout << -1;
}
return 0;
}