【发布时间】:2021-11-29 05:25:21
【问题描述】:
我遇到了this解决方案,和this,使用了滑动窗口技术,int[] A = {1, 2, 1, 2, 3};和K=2的方法是这样的:-
[1, 2]
[1, 2, 1]
[2, 1]
[2, 1, 2]
[1, 2]
[2, 3]
但是我不明白如何使用元素 {1, 2, 1, 2} 获取子数组
因为,恰好由两个元素组成的子数组是:-
[1, 2]
[1, 2, 1]
[2, 1]
[2, 1, 2]
[1, 2]
[2, 3]
[1, 2, 1, 2]
这是我的解决方案
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] A = {1, 2, 1, 2, 3};
int K = 2;
HashMap<Integer, Integer> map = new HashMap<>();
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0;i<A.length; i++){
map.put(A[i], map.getOrDefault(A[i], 0) + 1);
list.add(A[i]);
if(map.size() == K) System.out.println(list);
while(map.get(list.get(0)) > 1 || map.size() > K){
map.put(list.get(0), map.get(list.get(0)) - 1);
if (map.get(list.get(0)) == 0) map.remove(list.get(0));
list.remove(0);
if(map.size() == K) System.out.println(list);
}
}
}
}
给出输出
[1, 2]
[1, 2, 1]
[2, 1]
[2, 1, 2]
[1, 2]
[2, 3]
但我不明白如何在此方法中包含{1, 2, 1, 2}。
我哪里错了!
【问题讨论】: