5605. 检查两个字符串数组是否相等
直接拼接用string判断即可
class Solution {
public:
bool arrayStringsAreEqual(vector<string>& w1, vector<string>& w2) {
string a,b;
for(auto x:w1)a+=x;
for(auto x:w2)b+=x;
return a==b;
}
};
5606. 具有给定数值的最小字符串
显然尽量让前面字典序小。
所以先全构造a,然后慢慢从后往前改即可。
class Solution {
public:
string getSmallestString(int n, int k) {
string ans;
int nm=0;
for(int i=1;i<=n;i++)ans+='a',nm++;
k-=nm;
for(int i=n-1;i>=0;i--){
if(k>25){
ans[i]='z';
k-=25;
}else{
ans[i]='a'+k;
break;
}
}
return ans;
}
};
5607. 生成平衡数组的方案数
只删除一个数字,的话,我们可以直接枚举删除哪个数字,然后利用奇数和、偶数和做差值来判断即可。
class Solution {
public:
int waysToMakeFair(vector<int>& nums) {
int n=nums.size();
int ji=0,ou=0;
for(int i=0;i<n;i+=2)ou+=nums[i];
for(int i=1;i<n;i+=2)ji+=nums[i];
int nm=0;
for(int i=0;i<n;i++){
if(i&1)ji-=nums[i];
else ou-=nums[i];
if(ji==ou)nm++;
if(i&1)ji-=nums[i];
else ou-=nums[i];
}
return nm;
}
};
5608. 完成所有任务的最少初始能量
分析可知:
对于一个顺序的工作:第i 个任务的属性是{a[i],b[i]};
则第i个任务所需要的初始能量为:
而我们最少需要所有任务消耗的能力和:
所以我们只需要让每个i需要的初始能量尽量等于或小于sm即可。
由于后面的a[i]前缀和,已经积累起来了,肯定贪心让后面的b[i]更接近a[i](因为题目保证b[i]>=a[i])
所以直接按照b[i]-a[i]从大到小排序即可!
struct node{
int a,b,c;
}p[100007];
bool cmp(node a,node b){
if(a.c==b.c)
return a.b>b.b;
return a.c>b.c;
}
class Solution {
public:
int minimumEffort(vector<vector<int>>& tasks) {
int n=tasks.size();
for(int i=0;i<n;i++){
p[i]=node{tasks[i][0],tasks[i][1],tasks[i][1]-tasks[i][0]};
}
sort(p,p+n,cmp);
int mx=0,sm=0;
for(int i=0;i<n;i++){
mx=max(mx,sm+p[i].b);
sm+=p[i].a;
}
return mx;
}
};