力扣100题——128题

题目

************************************************

解(哈希)

VS完整代码

cpp 复制代码
#include<iostream>
#include<vector>
#include<unordered_set>
#include<utility>
#include<algorithm>
using namespace std;
int n, num;

int longestConsecutive(vector<int>& nums) {
	//使用哈希集合去重,遍历nums,对于每一个在集合中查找其及上下连续数字
	unordered_set<int> nums_set(nums.begin(), nums.end());
	int len = 0;
	int maxlen = 0;
	for (int num : nums) {
		if (nums_set.find(num)!= nums_set.end()) {
			nums_set.erase(num);
			len = 1;

			int cur = num - 1;
			while(nums_set.find(cur) != nums_set.end()) {
				nums_set.erase(cur);
				cur--;
				len++;
			}
			cur = num + 1;
			while (nums_set.find(cur) != nums_set.end()) {
				nums_set.erase(cur);
				cur++;
				len++;
			}
			maxlen = maxlen > len ? maxlen : len;
		}
		return maxlen;
	}
}

int main() {
	vector<int> nums;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> num;
		nums.push_back(num);
	}
	cout << longestConsecutive(nums) << endl;
	return 0;

}

力扣代码:

cpp 复制代码
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        // 使用哈希集合去重,遍历nums,对于每一个在集合中查找其及上下连续数字
        unordered_set<int> nums_set(nums.begin(), nums.end());
        int maxlen = 0;
        for (int num : nums) {
            if (nums_set.find(num) != nums_set.end()) {
                nums_set.erase(num);
                int len = 1;

                int cur = num - 1;
                while (nums_set.find(cur) != nums_set.end()) {
                    nums_set.erase(cur);
                    cur--;
                    len++;
                }
                cur = num + 1;
                while (nums_set.find(cur) != nums_set.end()) {
                    nums_set.erase(cur);
                    cur++;
                    len++;
                }
                maxlen = maxlen > len ? maxlen : len;
            }
        }
        return maxlen;
    }
};

通过!

复杂度分析:

用的集合unordered_set,这个集合平均的查找、删除等的时间复杂度通常看作O(1),我们遍历nums相当于O(n)。但是对于每个元素,我们只会进行一次操作,即删除(第一次访问到,第一次作为cur-1被访问到,或者cur+1被访问到)。故至多为O(n)

相关推荐
Brilliantwxx5 分钟前
【C++】认识vector(概念+题目OJ)
开发语言·c++·笔记·算法
逻辑驱动的ken7 分钟前
Java高频面试考点场景题22
java·开发语言·jvm·面试·职场和发展·求职招聘·春招
m0_629494738 分钟前
LeetCode 热题 100-----18.矩阵置零
数据结构·leetcode·矩阵
生成论实验室26 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第十篇:识势应势——从认知到行动的完整闭环
人工智能·算法·架构·创业创新·安全架构
risc12345628 分钟前
SegmentTermsEnum#postings 和 IntersectTermsEnum#postings
算法·lucene
阿Y加油吧30 分钟前
二刷 LeetCode:两道经典贪心题复盘
算法·leetcode·职场和发展
顺顺 尼31 分钟前
程序地址空间和进程的一些操作
算法
Java成神之路-33 分钟前
【LeetCode 刷题笔记】35. 搜索插入位置 | 二分查找经典入门题
算法·leetcode
计算机魔术师37 分钟前
【职场观察 | 技术人处境】五一假期结束,职场两边同时加速——“简历热“和“优化潮“背后的结构性逻辑
人工智能·面试·职场和发展·cot 推理·技术人求职·ai替代逻辑
MediaTea11 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法