0
点赞
收藏
分享

微信扫一扫

Leetcode 第 293 场周赛


​​2273. 移除字母异位词后的结果数组​​

class Solution {
public:
bool judge(string a,string b) {
vector<int> v1(26);
vector<int> v2(26);
for(int i=0;i<a.size();i++) v1[a[i]-'a']++;
for(int i=0;i<b.size();i++) v2[b[i]-'a']++;
for(int i=0;i<26;i++) if(v1[i]!=v2[i]) return true;
return false;
}
vector<string> removeAnagrams(vector<string>& words) {
vector<string> ans;
ans.push_back(words[0]);
int len = 0;
for(int i=1;i<words.size();i++) {
if(judge(ans[len],words[i])) {
ans.push_back(words[i]);
len++;
}
}
return ans;
}
};

​​2274. 不含特殊楼层的最大连续楼层数​​

思路:排序,遍历加起来

class Solution {
public:
int maxConsecutive(int bottom, int top, vector<int>& special) {
sort(special.begin(),special.end());
int ans = 0;
for(int i=0;i<special.size();i++) {
if(special[i]==bottom) {
bottom+=1;
continue;
}
ans = max(special[i]-bottom,ans);
bottom = special[i]+1;
}
ans = max(ans, top-bottom+1);
return ans;
}
};

2275. ​​按位与结果大于零的最长组合​​

二进制分解一波 然后看哪一位 个数最多

class Solution {
public:
int largestCombination(vector<int>& candidates) {
vector<int> v(32,0);
for(auto &x: candidates) {
int ix = 0;
while(x) {
if(x&1) v[ix]++;
x/=2;
ix++;
}
}
int ans = 0;
for(int i=0;i<32;i++)
ans = max(v[i],ans);
return ans;
}
};

​​2276. 统计区间中的整数数目​​

只写出来了三题,第四题花了一个多小时没调对。。。后来调出来了但是写的又长又****
思路:map或者set记录区间,然后区间合并。 stl 处理的不太熟练
​​​参考题解​​

class CountIntervals {
public:
set<pair<int,int>> se;
int ans;
CountIntervals() {
se.clear();
ans = 0;
}
void add(int left, int right) {
int L = left, R = right;
auto it = se.lower_bound(make_pair(left-1,-2e9));
while(it!=se.end()) {
if(it->second > right+1) break;
L = min(L, it->second);
R = max(R, it->first);
ans -= it->first - it->second + 1;
se.erase(it++);
}
ans += R - L + 1;
se.insert(make_pair(R, L));
}
int count() {
return ans;
}
};


举报

相关推荐

0 条评论