题目描述

最长无重复子数组:
给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组

示例1
输入:[2,3,4,5]
返回值:4
说明:[2,3,4,5]是最长子数组

示例2
输入:[2,2,3,4,3]
返回值:3
说明:[2,3,4]是最长子数组

示例3
输入:[9]
返回值:1

示例4
输入:[1,2,3,1,2,3,2,2]
返回值:3

说明:
最长子数组为[1,2,3]
示例5
输入:[2,2,3,4,8,99,3]
返回值:5
说明:最长子数组为[2,3,4,8,99]

解题思路:
//[2,2,3,4,3] [2,2,3,4,2][2,2,3,4,3,2,5,1][1][1,2,3,3]
1、从左到右遍历数组,设置一个起点值,将起点值放入map里,从起点值往右找。

2、当数字在map中时,将中标数字的下标的下一位作为给起点值,由于起始值会一直往右移动,防止起始值因为中标而往前移动,这里会判断上一次和本次的大小,大的起始值会优先,防止[3,3,2,1,3,3,3,1]这种数组的发生。

3、取出map中对应的下标,将当前位置下标-起点值下标,得到长度后如果比最大的还大则将最大的值变成这个长度。

4、将当前数字放入map里,key为值,value为下标(如果已经重复的数字,会更新下标值)

package array;import java.util.*;/*** 描述* 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。* 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组*/
public class MaxLength {/**** @param arr int整型一维数组 the array* @return int整型*/public int maxLength (int[] arr) {//[2,2,3,4,3]  [2,2,3,4,2][2,2,3,4,3,2,5,1][1][1,2,3,3]//从左到右遍历数组,设置一个起点值,将起点值放入map里,从起点值往右找,//当数字在map中时,将中标数字的下标的下一位作为给起点值,由于起始值会一直往右移动,防止起始值因为中标而往前移动,这里会判断上一次和本次的大小,大的起始值// 会优先,防止[3,3,2,1,3,3,3,1]这种数组的发生。//取出map中对应的下标,将当前位置下标-起点值下标,得到长度后如果比最大的还大则将最大的值变成这个长度,//将当前数字放入map里,key为值,value为下标(如果已经重复的数字,会更新下标值)if(arr.length<2){return arr.length;}int maxlength=0;Map<Integer,Integer> map=new HashMap<>();for(int i=0,start=0;i<arr.length;i++){if(map.containsKey(arr[i])){start=Math.max(map.get(arr[i])+1,start);}maxlength=Math.max(i-start+1,maxlength);map.put(arr[i],i);}return maxlength;}
}

最长无重复子数组算法-java实现相关推荐

  1. 数组算法 java 115918581

    获取数组真实长度 // 获取数组真实长度的算法private static int getArrNum(String[] strArr) {// 遍历数组来找真实长度for (int i = 0; i ...

  2. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)

    题目 https://leetcode.com/problems/longest-turbulent-subarray/ 题解 虽然 similar questions 没列出来,但能想到之前做过的( ...

  3. leetcode718. 最长重复子数组

    一:题目 二:上码 class Solution {public:/**思路:1.分析题意:1 2 3 6 7 41 2 6 7 4 3这里我们先遇到的1 2 但后来我们又遇见了6 7 4 那么我们的 ...

  4. 《程序员代码面试指南》第五章 字符串问题 找到字符串的最长无重复字符子串...

    题目 找到字符串的最长无重复字符子串 java代码 努力中.... 转载于:https://www.cnblogs.com/lizhouwei/p/8955166.html

  5. Java实现 LeetCode 718 最长重复子数组(动态规划)

    718. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释 ...

  6. 常考数据结构与算法:找到字符串的最长无重复字符子串

    题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...

  7. 两个数组进行比较_LeetCode 718. 最长重复子数组 | Python

    718. 最长重复子数组 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray 题 ...

  8. Java学习day096 并发(六)(线程安全的集合:高效的映射、集和队列、映射条目的原子更新、对并发散列映射的批操作、并发集视图、写数组的拷贝、并行数组算法、较早的线程安全集合)

    使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识. day096   并发(六)(线程安全的集合:高效的映射.集和队列.映射条目的原子更新.对并发散列映 ...

  9. 【算法】【递归与动态规划模块】两个字符串的最长公共子数组

    目录 前言 问题介绍 解决方案 代码编写 java语言版本 c语言版本 c++语言版本 思考感悟 写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批 ...

最新文章

  1. 聚焦机器学习和数据科学大佬工作的一天
  2. JAVA SE学习day_01:API、文档注释规范、String字符串的常用API
  3. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程
  4. suse linux mysql_SUSE Linux 下 MySQL集群配置
  5. oracle clob
  6. jboss as安装配置_书评:JBoss AS 7:配置,部署和管理
  7. JMeter定制功能实现
  8. 微小宝公众号排行榜_排行榜 | 山西省高校、高职中专微信公众号周数据排行榜...
  9. Linux下命令详解(-)
  10. 计算机网络(六)——连接到Internet
  11. 关于前端惰性加载(jquery_lazyload)的使用和原理分析
  12. 基于matlab的简单人脸识别程序代码
  13. 【FFmpeg4.1.4 编码】h265编码
  14. Drain:在线实时日志解析方法
  15. Java技术--单点登录统一认证系统的实现
  16. nyoj-34-韩信点兵
  17. java网络编程中Socket什么意思?怎么工作的?
  18. 支付宝 二维码/账号/转账码/生成方式/生成不可修改金额码
  19. 百词斩和扇贝单词 背单词功能模块测试
  20. windows批处理脚本bat命令解析【6】常用命令整理

热门文章

  1. windows服务器迁到_Windows服务器迁移工具使用攻略
  2. 一份新媒体营销推广策划方案 助你升级主管路
  3. 移动物联网项目搭建(一)——起步
  4. IG02数据准备(翻译)
  5. AtCoder Beginner Contest 211
  6. oracle 11g安装包下载地址合集
  7. Acwing春季每日一题 混合牛奶(朴素做法和优化做法)
  8. 解决公司无法访问自建的网站问题
  9. Powershell之MOF后门
  10. MWORKS.Syslab 使用攻略 | 信号处理工具箱实践-基于时差定位法的声源定位