拼多多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,刚看了其他人的解答,好像用离散+滑动窗口和尺取法能通过,但是看代码还是没看明白。。。