最长无重复子数组算法-java实现
题目描述
最长无重复子数组:
给定一个数组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实现相关推荐
- 数组算法 java 115918581
获取数组真实长度 // 获取数组真实长度的算法private static int getArrNum(String[] strArr) {// 遍历数组来找真实长度for (int i = 0; i ...
- leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
题目 https://leetcode.com/problems/longest-turbulent-subarray/ 题解 虽然 similar questions 没列出来,但能想到之前做过的( ...
- leetcode718. 最长重复子数组
一:题目 二:上码 class Solution {public:/**思路:1.分析题意:1 2 3 6 7 41 2 6 7 4 3这里我们先遇到的1 2 但后来我们又遇见了6 7 4 那么我们的 ...
- 《程序员代码面试指南》第五章 字符串问题 找到字符串的最长无重复字符子串...
题目 找到字符串的最长无重复字符子串 java代码 努力中.... 转载于:https://www.cnblogs.com/lizhouwei/p/8955166.html
- Java实现 LeetCode 718 最长重复子数组(动态规划)
718. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释 ...
- 常考数据结构与算法:找到字符串的最长无重复字符子串
题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...
- 两个数组进行比较_LeetCode 718. 最长重复子数组 | Python
718. 最长重复子数组 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray 题 ...
- Java学习day096 并发(六)(线程安全的集合:高效的映射、集和队列、映射条目的原子更新、对并发散列映射的批操作、并发集视图、写数组的拷贝、并行数组算法、较早的线程安全集合)
使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识. day096 并发(六)(线程安全的集合:高效的映射.集和队列.映射条目的原子更新.对并发散列映 ...
- 【算法】【递归与动态规划模块】两个字符串的最长公共子数组
目录 前言 问题介绍 解决方案 代码编写 java语言版本 c语言版本 c++语言版本 思考感悟 写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批 ...
最新文章
- 聚焦机器学习和数据科学大佬工作的一天
- JAVA SE学习day_01:API、文档注释规范、String字符串的常用API
- 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程
- suse linux mysql_SUSE Linux 下 MySQL集群配置
- oracle clob
- jboss as安装配置_书评:JBoss AS 7:配置,部署和管理
- JMeter定制功能实现
- 微小宝公众号排行榜_排行榜 | 山西省高校、高职中专微信公众号周数据排行榜...
- Linux下命令详解(-)
- 计算机网络(六)——连接到Internet
- 关于前端惰性加载(jquery_lazyload)的使用和原理分析
- 基于matlab的简单人脸识别程序代码
- 【FFmpeg4.1.4 编码】h265编码
- Drain:在线实时日志解析方法
- Java技术--单点登录统一认证系统的实现
- nyoj-34-韩信点兵
- java网络编程中Socket什么意思?怎么工作的?
- 支付宝 二维码/账号/转账码/生成方式/生成不可修改金额码
- 百词斩和扇贝单词 背单词功能模块测试
- windows批处理脚本bat命令解析【6】常用命令整理