67,515
社区成员
发帖
与我相关
我的任务
分享
public static int getLenght1(Integer[] arr) {
Map<Integer,Integer> map=new HashMap<>();
int min=arr.length;
for(int i=0;i<arr.length;i++){
if(map.containsKey(arr[i])){//遍历时判断map是否已经存了该key值,即判断是否有重复的元素
if((i-map.get(arr[i]))+1<min){//将新的位置i同已经存在map中对应key值的value相减并与min比较,将较小值赋值给min
min=(i-map.get(arr[i]))+1;
}
}
map.put(arr[i],i);
}
if(min==arr.length)//如果min还是等于数组长度,说明没有重复元素,直接返回-1
return -1;
else
return min;
}
用之前3楼的代码测试999999个数,花费时间为:105365ms
这个代码测试999999个数,花费时间为:78ms。这个代码的准确性我暂时还没测试,只是简单的测试了一下没问题
public static int getLength(int[] arr){
for (int i=2;i<arr.length+1;i++){
for(int j=0;j<arr.length-i+1;j++){
if(arr[j]==arr[j+i-1])return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] srcList= {1,2,3,1,4,5,4,6,8};
Map<Integer, List<Integer>> nums=new HashMap<Integer, List<Integer>>();
for (int i=0;i<srcList.length;i++) {
if (nums.containsKey(srcList[i])) {
nums.get(srcList[i]).add(i);
}else {
List<Integer> list=new ArrayList<Integer>();
list.add(i);
nums.put(i, list);
}
}
}
public static void main(String[] args) {
int[] srcList= {1,2,3,1,4,5,4,6,8};
Map<Integer, List<Integer>> nums=new HashMap<Integer, List<Integer>>();
for (int i=0;i<srcList.length;i++) {
if (nums.containsKey(srcList[i])) {
nums.get(srcList[i]).add(i);
}else {
List<Integer> list=new ArrayList<Integer>();
list.add(i);
nums.put(srcList[i], list);
}
}
Integer min=Integer.MAX_VALUE;
int start=0, end=0,diff=0;
for (Integer key: nums.keySet()) {
List<Integer> tmp=nums.get(key);
if(tmp.size()==1) continue;
for (int i=0; i<(tmp.size()-1);i++) {
diff=tmp.get(i+1)-tmp.get(i);
if (diff==1) {
start=tmp.get(i);
end=tmp.get(i+1);
min=1;
break;
}
if (diff<min) {
min=diff;
start=tmp.get(i);
end=tmp.get(i+1);
}
}
}
System.out.print("Min sublist length is: "+(min+1)+" from "+start + "to "+end);
}
public static int getLenght(int[] arr){
int min=arr.length;
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
if(j-i+1==2)//如果有重复元素,且长度为2,那么2就是最小长度,直接返回
return 2;
else if((j-i+1)<min)//遍历的过程中直接将最小的长度赋值给变量min
min=j-i+1;
}
}
}
if(min==arr.length)//如果min还是等于数组长度,说明没有重复元素,直接返回-1
return -1;
else
return min;
}