0%

LeetCode 第293场周赛

题目1:移除字母异位词后的结果数组

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

标签

排序数组字符串

思路

先将 words 中的每个字符串进行排序,然后逆序遍历,若当前字符串和前一字符串相等,则删除原数组中的该位置的字符串。最后返回原数组

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
vector<string> removeAnagrams(vector<string>& words) {
vector<string> arr;
for(int i = 0; i < words.size(); i++){
string str = words[i];
sort(str.begin(), str.end());
arr.emplace_back(str);
}
for(int i = arr.size() - 1; i > 0; i --){
if(arr[i] == arr[i - 1]){
words.erase(words.begin() + i);
}
}
return words;
}
};
  • 时间复杂度:O(n),其中 n 为数组 words 的大小
  • 空间复杂度:O(n),保存每个字符串排序后的数组

执行用时:4 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:13.2 MB, 在所有 C++ 提交中击败了100.00%的用户

通过测试用例:201 / 201

题目2:不含特殊楼层的最大连续楼层数

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

标签

数组排序数学

思路

将特殊楼层数组 special 进行排序,然后分别计算每两个特殊楼层之间的楼层数,取最大值。然后再和两端的楼层数作比较,取最大值。

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int maxConsecutive(int bottom, int top, vector<int>& special) {
sort(special.begin(), special.end());
int res = 0;
int n = special.size();
for(int i = 1; i < special.size(); i ++){
res = max(res, special[i] - special[i - 1] - 1);
}
// 两端的楼层计算
res = max(res, special[0] - bottom);
res = max(res, top - special[n - 1]);
return res;
}
};
  • 时间复杂度:O(n),其中 n 为数组 special 的大小
  • 空间复杂度:O(1)

执行用时:176 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:56.7 MB, 在所有 C++ 提交中击败了100.00%的用户

通过测试用例:80 / 80

题目3:按位与结果大于零的最长组合

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

题目4:统计区间中的整数数目

统计区间中的整数数目

正在加载今日诗词....