java数组maxlength,Java计算整形数组最长无重复子串长度

题目描述

给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。

示例1

输入

[2,3,4,5]

返回值

4

示例2

输入

[2,2,3,4,3]

返回值

3

备注:

1

import java.util.*;

public class Solution {

/**

*

* @param arr int整型一维数组 the array

* @return int整型

*/

public int maxLength (int[] arr) {

//如:[1,2,3,4,5,6,7,8,1,11,12,13,14] startIndex =0 当遍历到数组第8个位置1的时候,

//此时应从第一次出现重复元素0的位置元素1的下一个位置[2,3,4,5,6,7,8,1,11,12,13,14]

//开始滑动

if(arr == null || arr.length == 0){

return 0;

}

int startIndex = 0;

int maxLen = 0;

//hash数组长度为10的5次方,因为题中1≤n≤10的5次方 hash数组Index 0-99999 初始化中每个元素初始值为0

int[] hash = new int[100000];

int result = 0;

for(int i=0;i

int currentArrayVal = arr[i];

//如果没有不重复元素,hash[currentArrayVal]这个值就一直是0,那么start不会改变

//如果出现重复元素,就会取重复元素的索引的位置的值,作为索引值

startIndex = Math.max(startIndex,hash[currentArrayVal]);

result = Math.max(result,i-startIndex+1);

//存储当前元素的下一个元素坐标 因为涉及上面如果命中重复元素,startIndex要从之前重复元素坐标的下一位开始滑动

//如[1,2,3,4,5,6,7,8,1,11,12,13,14] startIndex =0 第一次存储1在hash中的是 0+1=1

//当遍历到第二个1的时候,需要数组滑动1位计算无重复子串[1,2,3,4,5,6,7,8,1,11,12,13,14] startIndex =1

//算出[2,3,4,5,6,7,8,1,11,12,13,14]是最长无重复子串结果

hash[currentArrayVal] = i + 1;

}

return result;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值