原题地址
好久没写题了,现在贼拉胯…
思路:每盆花种花时间是 a ,开花时间是 b ,显然不论如何排序,每盆花的种花时间都是连在一起的,那么要让总的时间最少,就要让开花时间尽量多的重叠,所以按开花时间从大到小排序,贪心的排。
class Solution {
public:
int earliestFullBloom(vector<int>& a, vector<int>& b) {
int n=(int)a.size();
vector<int>v(n);
for(int i=0;i<n;i++) v[i]=i;
sort(v.begin(),v.end(),
[&](int x,int y){return b[x]>b[y];});
int res=0;
int last=0;
for(int i=0;i<n;i++)
{
res=max(res,last+a[v[i]]+b[v[i]]);
last+=a[v[i]];
}
return res;
}
};
这次学到个东西,排序的时候lambda尽量把捕获列表设成引用,要不然每次比较都会复制整个 vector ,直接就 t 了。