大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
本题考察如何使用哈希表来快速查找最长连续标签序列的长度。
题目解答方法的文字分析
我们可以使用哈希表来解决这个问题。
具体步骤如下:
- 使用unordered_set记录所有牛的标签编号,以便快速查找是否存在某个编号。
- 遍历tag数组,对于每个标签编号,检查是否存在其前一个编号和后一个编号,如果存在,则说明存在连续标签序列。
- 对于每个连续标签序列,使用while循环不断向前和向后查找,直到找不到连续标签为止。
- 在查找过程中,将已经访问过的标签从unordered_set中移除,以避免重复查找。
- 更新最长连续标签序列的长度。
- 返回最长连续标签序列的长度。
本题解析所用的编程语言 (C++)
C++
完整且正确的编程代码
class Solution { public: int longestConsecutive(vector<int>& tag) { unordered_set<int> nums_set; // 记录所有牛的标签编号 for (int t : tag) { nums_set.insert(t); // 将标签编号加入哈希表 } int longest_len = 0; // 最长连续标签序列的长度 for (int t : tag) { // 如果t - 1存在于哈希表中,说明存在连续标签序列 if (nums_set.count(t - 1) == 0) { int current_len = 1; // 当前连续标签序列的长度 int current_num = t; // 当前连续标签序列的起始标签编号 // 不断向后查找连续标签序列 while (nums_set.count(current_num + 1) > 0) { current_num++; current_len++; } longest_len = max(longest_len, current_len); // 更新最长连续标签序列的长度 } } return longest_len; } };