题解 | #连续的牛群标签序列#

连续的牛群标签序列

https://www.nowcoder.com/practice/5db36ae74c274176a0cf9274e9f9ed3e

考察的知识点:哈希;

解答方法分析:

  1. 代码中定义了一个unordered_map<int, int> mp;用来存储标签的连续序列长度。其中,键为标签的值,值为该标签所在连续序列的长度。
  2. 通过for循环遍历给定的标签数组。
  3. 通过判断标签是否存在于哈希表中来判断标签是否重复。若标签在哈希表中不存在,则进行后续操作。避免重复处理相同的标签。
  4. 通过查找哈希表中前一个标签和后一个标签所在连续序列的长度,来计算当前标签所在连续序列的长度。若前一个标签存在,则取其连续序列的长度;若后一个标签存在,则取其连续序列的长度。加1即为当前标签所在连续序列的长度。
  5. 更新当前标签所在连续序列的长度,并更新序列的首尾标签所在连续序列的。同时,通过比较当前连续序列的长度和最长连续序列的长度,更新最长连续序列的长度。
  6. 遍历完标签数组后,最长连续序列的长度已经求得,将其返回。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param tag int整型vector
     * @return int整型
     */
    int longestConsecutive(vector<int>& tag) {
        unordered_map<int, int> mp;
        int longest = 0;
        for (int i = 0; i < tag.size(); ++i) {
            int num = tag[i];
            if (mp.find(num) == mp.end()) {
                int left = mp.find(num - 1) != mp.end() ? mp[num - 1] : 0;
                int right = mp.find(num + 1) != mp.end() ? mp[num + 1] : 0;
                int curr = left + right + 1;
                mp[num] = curr;
                longest = max(longest, curr);
                mp[num - left] = curr;
                mp[num + right] = curr;
            }
        }
        return longest;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-30 11:32
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务