#include<bits/stdc++.h>
usingnamespacestd;#define ll long long
classSolution{public:intfun(strings){intres=0;res+=s[4]-'0';res+=10*(s[3]-'0');intx=((s[0]-'0')*10+(s[1]-'0'));res+=x*60;returnres;}boolhaveConflict(vector<string>&event1,vector<string>&event2){intx1=fun(event1[0]),x2=fun(event1[1]);inty1=fun(event2[0]),y2=fun(event2[1]);if(x1>y2||x2<y1)returnfalse;returntrue;}};
【枚举+gcd】最大公因数等于 K 的子数组数目
题目
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums 的子数组中元素的最大公因数等于 k 的子数组数目。
#include<bits/stdc++.h>
usingnamespacestd;#define ll long long
classSolution{public:intsubarrayGCD(vector<int>&nums,intk){intn=nums.size();intres=0;for(inti=0;i<n;i++){if(nums[i]==k)res++;intg=nums[i];for(intj=i-1;j>=0;j--){if(__gcd(g,nums[j])==k){res++;}g=__gcd(g,nums[j]);}}returnres;}};
#include<bits/stdc++.h>
usingnamespacestd;#define ll long long
classSolution{public:longlongminCost(vector<int>&nums,vector<int>&cost){intn=nums.size();vector<int>idx(n);iota(idx.begin(),idx.end(),0);sort(idx.begin(),idx.end(),[&](inta,intb){returnnums[a]<nums[b];});llsum=0;for(auto&x:cost)sum+=x;llres=0,u=0;for(inti=0;i<n;i++){u+=1ll*(nums[idx[i]]-nums[idx[0]])*cost[idx[i]];}res=u;llhead=cost[idx[0]],tail=sum-head;for(inti=1;i<n;i++){lldiff=nums[idx[i]]-nums[idx[i-1]];u+=diff*head;u-=diff*tail;head+=cost[idx[i]];tail-=cost[idx[i]];res=min(res,u);}returnres;}};
【贪心+排序】使数组相似的最少操作次数
题目
给你两个正整数数组 nums 和 target ,两个数组长度相等。
在一次操作中,你可以选择两个 不同 的下标 i 和 j ,其中 0 <= i, j < nums.length ,并且: