1. 程式人生 > 資訊 >中國零售商首次躋身全球零售前十強:京東位居第九

中國零售商首次躋身全球零售前十強:京東位居第九

leetcode 128. 最長連續序列

128. 最長連續序列

給定一個未排序的整數陣列nums,找出數字連續的最長序列(不要求序列元素在原陣列中連續)的長度。

請你設計並實現時間複雜度為O(n)的演算法解決此問題。

示例 1:

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

示例 2:

輸入:nums = [0,3,7,2,5,8,4,6,0,1]
輸出:9

提示:

  • 0 <= nums.length <= 105
  • -109<= nums[i] <= 109
 1 #include <iostream>
 2 #include <unordered_map>
 3
#include <vector> 4 #include <algorithm> 5 using namespace std; 6 7 class Solution { 8 public: 9 int longestConsecutive(vector<int>& nums) { 10 // 先對陣列進行升序排序 11 std::sort(nums.begin(), nums.end()); 12 // 對於陣列中重複的元素只保留第一個(去重) 13 std::vector<int
>::iterator it; 14 it = std::unique(nums.begin(), nums.end()); 15 nums.resize(std::distance(nums.begin(), it)); 16 17 int size = nums.size(); 18 if (size == 0) { 19 return 0; 20 } 21 22 int maxLen = 1; 23 int tmpMax = 1; 24 for
(int i = 0; i < size - 1; i++) { 25 // 如果當前值加1等於後面值,則表示連續,連續元素個數加1並計算最大連續元素個數, 26 // 否則最大連續元素個數重新計算 27 if (nums[i + 1] == nums[i] + 1) { 28 tmpMax++; 29 maxLen = std::max(maxLen, tmpMax); 30 } else { 31 tmpMax = 1; 32 } 33 } 34 return maxLen; 35 } 36 }; 37 38 int main() 39 { 40 Solution *test = new Solution(); 41 42 std::vector<int> vec = {100, 100, 200, 1, 2, 2, 2, 3, 3, 7, 9, 10}; 43 std::cout << test->longestConsecutive(vec) << endl; // 3 44 45 vec = {}; 46 std::cout << test->longestConsecutive(vec) << endl; // 0 47 48 vec = {0, 3, 7, 2, 5, 8, 4, 6, 0, 1}; 49 std::cout << test->longestConsecutive(vec) << endl; // 9 50 51 vec = {100, 4, 200, 1, 3, 2}; 52 std::cout << test->longestConsecutive(vec) << endl; // 4 53 54 delete test; 55 system("pause"); 56 return 0; 57 }