zoukankan      html  css  js  c++  java
  • Leetcode 最长连续序列

    题目链接:https://leetcode-cn.com/problems/longest-consecutive-sequence/

    题目大意:

      略。

    分析:

      注意有重复值,序列为空等情况。

    代码如下:

     1 class Solution {
     2 public:
     3     int longestConsecutive(vector<int>& nums) {
     4         unordered_map< int, int > m1; // 存以 key 为首的最长连续序列的长度
     5         unordered_map< int, int > m2; // 存以 key 为尾的最长连续序列的长度
     6         unordered_set< int > vis; // 检查数是否出现过
     7         int ans = 0;
     8         
     9         for(int i = 0; i < nums.size(); ++i) {
    10             if(vis.find(nums[i]) != vis.end()) continue;
    11             vis.insert(nums[i]);
    12             
    13             m1[nums[i]] = m2[nums[i]] = 1;
    14             
    15             if(m2.find(nums[i] - 1) != m2.end()) { // 查一下是否存在以nums[i] - 1结尾的序列
    16                 splice(nums[i] - 1, nums[i], m2, m1); // 拼接
    17             }
    18             if(m1.find(nums[i] + 1) != m1.end()) { // 查一下是否存在以nums[i] + 1开头的序列
    19                 splice(nums[i], nums[i] + 1, m2, m1); // 拼接
    20             }
    21         }
    22         
    23         for(auto &x : m1) ans = max(ans, x.second);
    24         
    25         return ans;
    26     }
    27     
    28     // 拼接以B结尾的序列和以A开头的序列
    29     inline void splice(int B, int A, unordered_map< int, int > &mB, unordered_map< int, int > &mA) {
    30         mB[A + mA[A] - 1] = mA[B - mB[B] + 1] = mB[B] + mA[A];
    31         mA.erase(A);
    32         mB.erase(B);
    33     }
    34 };
    View Code
  • 相关阅读:
    Combox小问题
    数据库登录名,用户,角色以及权限分配
    UDP初识
    AJax 无刷新构建DataTable
    批量修改数据库构架SQL
    Jquery Ajax
    Linq中使用Group By
    对象的消息模型
    P2P网络技术概览与实现原理
    ajax(1)
  • 原文地址:https://www.cnblogs.com/zaq19970105/p/11408556.html
Copyright © 2011-2022 走看看