拼多多4.10笔试第四题
public class Main {
public int getLongestSubLen(List<Integer> list){
int i=0;
int j = 0;
int res = 0;
while(j<list.size()){
while(j<list.size()&&Objects.equals(list.get(i),list.get(j)))++j;
if(j-i>res)res = j-i;
i = j;
}
if (j-i>res)res = j-i;
return res;
}
public void func(List<Integer> list,int k){
int len = getLongestSubLen(list);
if(len>ansLen)ansLen = len;
if (k<=0)return;
for (int i = 0;i<list.size();++i){
int element = list.remove(i);
func(list,k-1);
list.add(i,element);
}
}
int ansLen = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
List<Integer> list = new LinkedList<>();
for (int i=0;i<n;++i){
list.add(scanner.nextInt());
}
Main test = new Main();
test.func(list,k);
System.out.println(test.ansLen);
}
}
这是我当时的作答,才通过10% T_T,刚看了其他人的解答,好像用离散+滑动窗口和尺取法能通过,但是看代码还是没看明白。。。
