leetcode.128 最長連續序列

128. 最長連續序列

給定一個未排序的整數數組,找出最長連續序列的長度。

要求算法的時間複雜度爲 O(n)

示例:

輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度爲 4。

題目要求 O(n) 複雜度。

  • 用哈希表存儲每個端點值對應連續區間的長度
  • 若數已在哈希表中:跳過不做處理
  • 若是新數加入:
    • 取出其左右相鄰數已有的連續區間長度 left 和 right
    • 計算當前數的區間長度爲:cur_length = left + right + 1
    • 根據 cur_length 更新最大長度 max_length 的值
    • 更新區間兩端點的長度值
#include <iostream>
#include <vector>
#include <map>

using namespace std;

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
    	map<int, int> hashmap;
    	int maxlen = 0;
    	int len = nums.size();
    	int curlen;
    	int i;
    	int left, right;
    	for(i = 0; i < len; i++){

    		if(hashmap[nums[i]] == 0){
    			
    			left = hashmap[nums[i] - 1];
    			right = hashmap[nums[i] + 1];
    			curlen = left + right + 1;
    			if(curlen > maxlen){
    				maxlen = curlen;
    			}
    			hashmap[nums[i]] = curlen;
    			hashmap[nums[i] - left] = curlen;
    			hashmap[nums[i] + right] = curlen;

    		}
    		
    	}
    	return maxlen;

    }
};

int main(){
	int n[] = {100, 4, 200, 1, 3, 2};
	vector<int> nums(n, n + 6);
	Solution a;
	int re = a.longestConsecutive(nums);
	cout << re << endl;



}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章