zoukankan      html  css  js  c++  java
  • 牛客高频题--最长无重复子数组

    NC41 最长无重复子数组

     1 class Solution {
     2 public:
     3     /**
     4      * 
     5      * @param arr int整型vector the array
     6      * @return int整型
     7      */
     8     int maxLength(vector<int>& arr) {
     9         // write code here
    10         // 从前到后遍历,双指针front,idx指向无重复数组的前后端;
    11         // 用一个变量记录当前的最大数组长度,如果后续出现重复值,就从重复处cidx截断,继续向后遍历。
    12         if(arr.empty()){return 0;}
    13         int front=0,idx=1;
    14         map<int,int> cs;cs.insert(make_pair(arr[0], 0));
    15         int maxlen=1;
    16         int curlen=1;;
    17         while(idx<arr.size()){
    18             int cidx;
    19             if(cs.count(arr[idx])>0){
    20                 cidx=cs[arr[idx]];
    21                 maxlen=maxlen>curlen?maxlen:curlen;  // 先保留最大值
    22                 // 将重复元素前的清空
    23                 for(int i=front;i<=cidx;i++){
    24                     cs.erase(arr[i]);
    25                     curlen-=1;
    26                 }
    27                 front=cidx+1;
    28             }
    29             cs.insert(make_pair(arr[idx],idx));
    30             curlen++;
    31             ++idx;
    32         }
    33         return max(curlen,maxlen);
    34     }
    35 };
    心之所愿,永不相忘
  • 相关阅读:
    soa soap http rpc
    Work Queues(点对多)
    Hello World模式
    RabbitMQ 概念
    RabbitMQ安装
    gradle ssh 插件
    gradle基础配置
    将java打jar包成linux后台服务service
    java 8 日期api
    springboot linux启动方式
  • 原文地址:https://www.cnblogs.com/zgll/p/15238490.html
Copyright © 2011-2022 走看看