classSolution{public:intclosetTarget(vector<string>& words, string target,int idx){int n = words.size();int res =999999;for(int i =0; i < words.size(); i ++){if(words[i]== target){int r =max(idx, i);int l =min(idx, i);
res =min({res, r - l, n - r + l});}}if(res ==999999)return-1;return res;}};
T2 每种字符至少取 K 个 — 二分
classSolution{public:int cnta[200010]={0}, cntb[200010]={0}, cntc[200010]={0};boolcheck(int len,int k,int n){for(int i = n -1; i >=0; i --){if(i + len < n -1)break;if(cnta[i + len]- cnta[i]>= k && cntb[i + len]- cntb[i]>= k && cntc[i + len]- cntc[i]>= k)returntrue;}returnfalse;}inttakeCharacters(string s,int k){int n = s.size();
s += s;if(k ==0)return0;for(int i =0; i < s.size(); i ++){if(i) cnta[i]= cnta[i -1], cntb[i]= cntb[i -1], cntc[i]= cntc[i -1];if(s[i]=='a') cnta[i]++;if(s[i]=='b') cntb[i]++;if(s[i]=='c') cntc[i]++;}if(cnta[n -1]< k || cntb[n -1]< k || cntc[n -1]< k)return-1;int l =1, r = n;while(l < r){int mid = l + r >>1;if(check(mid, k, n)) r = mid;else l = mid +1;}return r;}};
T3 礼盒的最大甜蜜度 — 二分
classSolution{public:boolcheck(vector<int> w,int x,int k){int pre = w[0], cnt =1;for(int i =1; i < w.size(); i ++){if(w[i]- pre >= x){
pre = w[i];
cnt ++;}}if(cnt >= k)returntrue;elsereturnfalse;}intmaximumTastiness(vector<int>& w,int k){int n = w.size();sort(w.begin(), w.end());int l =0, r =1e9;while(l < r){int mid = l + r +1>>1;if(check(w, mid, k)) l = mid;else r = mid -1;}return r;}};
T4 好分区的数目—dp
classSolution{public:intcountPartitions(vector<int>& nums,int k){int n = nums.size();int mod =1000000007;longlong sum =0, res =1;
vector<int>f(k,0);
f[0]=1;for(int i =0; i < n; i ++){
res = res *2% mod;
sum += nums[i];for(int j = k -1; j >= nums[i]; j --)
f[j]=(f[j]+ f[j - nums[i]])% mod;}if(sum <2* k)return0;for(int j =0; j < k; j++)
res =(res -2* f[j])% mod;return(res + mod)% mod;}};