描述

给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组
 
数据范围:0\le arr.length \le 10^60≤arr.length≤106,0 < arr[i] \le 10^50<arr[i]≤105
要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)

方法1:双层循环,加入set,有重复看下一个

import java.util.*;

public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
if(arr.length == 0) {
return 0;
}
int maxLen = 0;
for(int i = 0; i < arr.length; i++) {
Set<Integer> set = new HashSet<>();
set.add(arr[i]);
for(int j = i + 1; j < arr.length; j++) {
if(set.contains(arr[j])) {
break;
}
set.add(arr[j]);
}
maxLen = Math.max(maxLen, set.size());
}
return maxLen;
}
}

方法2:双指针优化(一层循环+一个指针),在循环内对指针进行变更

import java.util.*;

public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
if(arr.length < 2) {
return arr.length;
}
int maxLen = 0;
Set<Integer> set = new HashSet<>();
int left = 0;
for(int i = 0; i < arr.length; i++) {
//循环移除直到不包含当前元素
while(set.contains(arr[i])) {
set.remove(arr[left++]);
}
set.add(arr[i]);
maxLen = Math.max(maxLen, i - left + 1);
}
return maxLen;
}
}

方法3:用一个集合保存无重复的元素--2022年1月22日更新,最简单

public int maxLength (int[] arr) {
int maxLen = 0;
List<Integer> list = new ArrayList<>();
for(int i = 0; i < arr.length; i++) {
while(list.contains(arr[i])) {
list.remove(0);
}
list.add(arr[i]);
maxLen = Math.max(maxLen, list.size());
}
return maxLen;
}

【每日一题】【集合增删】2022年1月13日-NC41 最长无重复子数组-220113/220122的更多相关文章

  1. 2022年5月11日,NBMiner发布了41.3版本,在内核中加入了100%LHR解锁器,从此NVIDIA的显卡再无锁卡一说

           2022年5月11日,NBMiner发布NBMiner_41.3版本,主要提升了稳定性.         2022年5月8日,NBMiner发布NBMiner_41.0版本,在最新的内核 ...

  2. 关于2022年3月9日之后Typora登录不了--已解决

    p.s.今天是2022.7.27,软件版本:13.6.1 (以下所有方法,亲自尝试后整理出的) 报错信息: This beta version of typora is expired, please ...

  3. .NET Conf 2022 &ndash; 11 月 8 日至 10 日

    .NET Conf 2022 下周就正式开启了,时间是美国时间的 11月8日至10日..NET Conf 2022是一个免费的,为期三天的, 虚拟开发人员活动提供多种实时会话,其中包括来自社区和 .N ...

  4. ccf题库中2016年4月2日俄罗斯方块问题

    题目如下: 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏. 游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块.每一轮,都会有一个新 ...

  5. LeetCode第三题—— Longest Substring Without Repeating Characters(最长无重复子字符串)

    题目描述 Given a string, find the length of the longest substring without repeating characters. Example ...

  6. Java数组-2022年4月17日

    目录 数组 数组Array 数组的常见异常 数组的遍历 数组的扩容 数组类型的返回值 可变长数组 排序算法 二维数组 测试代码 数组 数组Array ArrayList概念:一个连续的空间,存储多个相 ...

  7. 【Java每日一题】20161019

    20161018问题解析请点击今日问题下方的"[Java每日一题]20161019"查看 package Oct2016; import java.util.List; publi ...

  8. 【JavaScript】Leetcode每日一题-最大整除子集

    [JavaScript]Leetcode每日一题-最大整除子集 [题目描述] 给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对(an ...

  9. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  10. web前端教程《每日一题》(1-99)完结

    第1期(2016年4月6日): (1)js中关闭当前窗口的方法是:window.close(); 第2期(2016年4月7日): (1)js中使字符串中的字符变为小写的方法是:toLowerCase方 ...

随机推荐

  1. 五、frp内网穿透客户端frpc.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]frps服务端IPserver_addr = 0.0.0.00.0.0.0为FRP服务端IP,客户端要填写为服务端已配置的对应的IP,或者是服务 ...

  2. Solutions:Elastic workplace 搜索:随时随地搜索所有内容 (二)

  3. NSIS V3.08 简体中文增强版

    说明: 该3.08版本属本人业余时间集成修改制作,首发博客园,欢迎反馈安装与使用中出现的BUG,转载请注明出处! 本版本母版源自NSIS(Nullsoft Scriptable Install Sys ...

  4. 【博学谷学习记录】超强总结,用心分享|Linux修改文件权限方法总结

    一.介绍 linux中"一切皆文件".每个文件都设定了针对不同用户的访问权限. 文件权限主要针对以下三种对象: 属主:拥有者 属组:所属的组 其他人:不属于上述两类 二.文件权限 ...

  5. Js实现一键复制小功能

    function copyToClipboard(textToCopy) { // navigator clipboard 需要https等安全上下文 if (navigator.clipboard ...

  6. 1.MongoDB之服务启动

    1. 编写docker-compose.yaml文件 version: "3" services: mongo: image: mongo:4.2.6 ports: - 27017 ...

  7. mybatis-获取参数值的方式

    MyBatis获取参数值的两种方式(重点) MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串 ...

  8. Python基础部分:4、 python语法之注释

    目录 一.python语法之注释 1.什么是注释 2.如何编写注释 二.PEP8规范 一.python语法之注释 1.什么是注释 注释用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何 ...

  9. 出现The server time zone value ‘�й���׼ʱ��‘ is unrecognized的解决方法

    使用mybatis链接数据库时出现如下错误, The server time zone value '�й���׼ʱ��' is unrecognized or represents more tha ...

  10. Codeforces Round #809 (Div. 2)C.Qpwoeirut And The City

    题目大意: 当一栋楼比旁边两栋楼都高的时候,这栋楼为cool,对除了1和n以外的所有楼可以增加任意层,问在满足使最多的楼cool的前提下的花费最小. 当n为奇数的情况下: cool的楼实际上是固定的, ...