int longestConsecutive(const vector<int> &nums) { unordered_map<int, bool> used; for (auto i : nums) used[i] = false; int longest = 0; for (auto i : nums) { if (used[i]) continue; int length = 1; used[i] = true; for (int j = i + 1; used.find(j) != used.end(); ++j) { used[j] = true; ++length; } for (int j = i - 1; used.find(j) != used.end(); --j) { used[j] = true; ++length; } longest = max(longest, length); } return longest;分析以上代码
时间: 2024-04-06 12:31:52 浏览: 53
这段代码计算给定无序整数数组中最长连续序列的长度。它使用了哈希表 unordered_map 来记录是否使用了每个数字,然后对于每个数字,进行向上和向下的扩展,直到找到不在数组中的数字为止,计算其长度并更新最长长度。最后返回最长长度。
需要注意的是,该算法的时间复杂度为 O(n),因为只对每个数进行了一次遍历,而在哈希表中查找数字的时间复杂度是 O(1)。但是,这个算法的空间复杂度为 O(n),因为需要使用一个哈希表来存储每个数字是否已经使用。
相关问题
c++ vector查重
你可以使用 `std::set` 或 `std::unordered_set` 来检查 `std::vector` 中的重复元素。这两个容器都可以确保元素的唯一性。以下是一个示例代码:
```cpp
#include <iostream>
#include <vector>
#include <set>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5, 3, 4};
std::set<int> numSet;
bool hasDuplicates = false;
for (const auto& num : nums) {
if (numSet.count(num) > 0) {
hasDuplicates = true;
break;
}
numSet.insert(num);
}
if (hasDuplicates) {
std::cout << "Vector contains duplicates." << std::endl;
} else {
std::cout << "Vector does not contain duplicates." << std::endl; }
return 0;
}
```
上述代码中,我们遍历了 `nums` 向量,并将元素插入到 `numSet` 集合中。如果插入操作返回的是 0,即该元素已经存在于集合中,那么就说明存在重复元素。通过标记 `hasDuplicates` 变量来判断是否存在重复元素。
希望能够帮助到你!如果有任何问题,请随时提问。
C++代码实现,给定n个正整数,将它们分组,使得每组中任意两个数互质。输入:第一行是一个正整数n。1 ≤ n ≤ 10。 第二行是n个不大于10000的正整数。输出:一个正整数,即最少需要的组数。
这个问题可以通过欧几里得算法来解决,寻找两数的最大公约数,如果最大公约数为1,则这两个数互质。我们可以使用哈希表(unordered_set)存储每个数字及其已知互质的数字集合,然后遍历整个数组,尝试把当前元素添加到每个已知互质集合中,检查是否可以形成互质的组合。若无法形成,则创建一个新的互质集合。最后返回互质集合的数量作为结果。
下面是一个简单的C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
unordered_set<int> gcdSet(int n) {
unordered_set<int> groups;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
bool added = true;
for (auto &group : groups) {
int gcd = __gcd(nums[i], group);
if (gcd != 1) {
added = false;
break;
}
}
if (added) {
groups.insert(nums[i]);
} else {
groups.insert({nums[i]});
}
}
return groups;
}
int main() {
int n;
cin >> n;
int result = 0;
for (const auto &group : gcdSet(n)) {
result++;
}
cout << result << endl;
return 0;
}
阅读全文