首页 > 其他分享 >Leetcode热题100-128.最长连续序列

Leetcode热题100-128.最长连续序列

时间:2024-08-09 13:27:26浏览次数:9  
标签:cnt return nums int res Leetcode num 128 热题

Leetcode热题100-128.最长连续序列

1. 题目描述

128.最长连续序列

2. 解题思路

  1. 使用哈希集合的思想:
    • 初始化一个unordered_set并将nums中所有元素放入集合中;
    • 遍历数组,依次判断当前元素是否为连续序列的开始,若是则求出当前连续序列的长度;
    • 依次比较得到最长连续序列。
  2. 使用并查集的思想:
    • 将连续的数字作为一个集合,并记录当前集合元素的个数;
    • 依次判断每个元素的下一个元素是否存在在同一个集合中,若存在则合并,并更新当前集合的元素个数;
    • 比较得到最长连续序列。

3. 代码实现

  1. 哈希集合
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> set;
        for (auto num : nums) {
            set.insert(num);
        }
        int res = 0;
        for (auto num : nums) {
            // 当前数字为序列的起点
            if (!set.count(num - 1)) {
                int cur_res = 0;
                while (set.count(num++))
                    cur_res++;
                res = max(cur_res, res);
            }
        }
        return res;
    }
};

2.并查集

class Solution {
public:
    // 其中cnt用于记录当前集合的元素数目
    unordered_map<int, int> uf, cnt;

    int find(int x) {
        if (x == uf[x])
            return x;
        return uf[x] = find(uf[x]);
    }

    int merge(int x, int y) {
        x = find(x);
        y = find(y);
        if (x == y)
            return cnt[x];
        uf[y] = x;
        // 更新合并后的连通分量的元素个数
        cnt[x] += cnt[y];
        return cnt[x];
    }
    int longestConsecutive(vector<int>& nums) {
        if (nums.size() == 0)
            return 0;
        for (auto num : nums) {
            uf[num] = num;
            cnt[num] = 1;
        }
        int res = 1;
        for (auto num : nums) {
            if (uf.count(num + 1)) {
                res = max(res, merge(num, num + 1));
            }
        }
        return res;
    }
};

标签:cnt,return,nums,int,res,Leetcode,num,128,热题
From: https://blog.csdn.net/qewa132/article/details/141059419

相关文章

  • leetcode考试题
       +-------------+----------+|ColumnName|Type|+-------------+----------+|id|int||client_id|int||driver_id|int||city_id|int||status|enum||request_at|varchar|......
  • LeetCode | 349 Intersection Of Two Arrays
    分析两个数组的交集,双指针使用的前提是,两个数组已经处于有序状态。双指针的本质是遍历;双指针在线性数据结构中,进行数据处理,每次只专注于两个元素;指针遍历将问题拆解为两部分,即已解决和待解决问题。倘若两个数组是无序的状态,双指针指向每次都无法确认是否在历史中已经出现过,这个时......
  • LeetCode 1111. 有效括号的嵌套深度
    1111.有效括号的嵌套深度有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。详情参见题末「嵌套深度」部分。有......
  • 3128. 直角三角形
    3128.直角三角形题目链接:3128.直角三角形代码如下://参考链接:https://leetcode.cn/problems/right-triangles/solutions/2758892/cheng-fa-yuan-li-pythonjavacgo-by-endles-7469classSolution{public: longlongnumberOfRightTriangles(vector<vector<int>>&g......
  • 代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形
    代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形LeetCode(42)接雨水题目代码importjava.util.Stack;classSolution{publicinttrap(int[]height){//用单调栈进行操作intsum=0;Stack<Integ......
  • LeetCode144 二叉树的前序遍历
    前言题目:144.二叉树的前序遍历文档:代码随想录——二叉树的递归遍历编程语言:C++解题状态:基础知识不了解思路两种思路,第一是递归。递归算法有三个要素。每次写递归,都按照这三要素来写!确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就......
  • UnicodeEncodeError:“ascii”编解码器无法对位置 20 中的字符 u'\xa0' 进行编码:序号
    我在处理从不同网页(在不同站点上)获取的文本中的unicode字符时遇到问题。我正在使用BeautifulSoup。问题是错误并不总是可重现的;它有时适用于某些页面,有时,它会因抛出UnicodeEncodeError而呕吐。我已经尝试了几乎所有我能想到的方法,但我还没有找到任何可以一致工作......
  • (leetcode学习)50. Pow(x, n)
    实现 pow(x,n) ,即计算x的整数 n次幂函数(即,xn)。示例1:输入:x=2.00000,n=10输出:1024.00000示例2:输入:x=2.10000,n=3输出:9.26100示例3:输入:x=2.00000,n=-2输出:0.25000解释:2-2=1/22=1/4=0.25提示:-100.0<x<100.0-231<=n<=231......
  • Leetcode: 1484. Groups Sold Products By The Date
    题目要求如下:输入的数据为要求按照日期查询出每日销售数量及相应产品的名称,并按照字符顺序进行排序。下面是实现的代码:importpandasaspddefcategorize_products(activities:pd.DataFrame)->pd.DataFrame:val=activities.drop_duplicates().groupby("sell......
  • Leetcode: 586. Customer Placing the Largest Number of Orders
    题目要求如下:给出的例子如下:简单地说就是要找出表中订单最多客户的ID。使用如下的代码进行实现:importpandasaspddeflargest_orders(orders:pd.DataFrame)->pd.DataFrame:returnorders.groupby("customer_number").count().reset_index().nlargest(1,colum......