staticList> res;publicstaticvoidmain(String[] args){
res =newLinkedList();// write your code hereScanner scan =newScanner(System.in);intN= scan.nextInt();
scan.close();int nums[]=newint[N];judge(N, nums,0,newLinkedList());for(List list : res){System.out.println(list);}}publicstaticvoidjudge(int n,int[] nums,int index,List list){if(index == n){
res.add(newLinkedList(list));return;}for(int i =1; i <= n; i++){if(nums[i-1]==0&&(list.size()==0||Math.abs(list.get(list.size()-1)-i)!=1)){
list.add(i);
nums[i-1]=1;judge(n, nums, index+1, list);
list.remove(list.size()-1);
nums[i-1]=0;}}}
1.2 题目2
长度为 n 的数组,数组中每个元素 a 满足:1<=a<=n
求连续区间的数量,要求区间中相同元素的数量 >=m
例如:
52121524
可以有4种可能:[1,3],[1,5],[2,5],[1,4]
思路:用map存一个当前数的list集合,从前往后遍历,符合m条件的,则将对应数量添加到res
并且维护一个变量pt,用来判断当前数不符合m条件,但之前有符合m条件的数出现过的首个数的下标
publicstaticvoidmain(String[] args){Scanner scan =newScanner(System.in);intN= scan.nextInt();//数量int m = scan.nextInt();//相同的个数Map> map =newHashMap();int res =0;int pt =-1;//记录当前元素num前,存在m个相同元素a的第一个元素的下标。不存在则为-1for(int i =0; i <N; i++){int num = scan.nextInt();if(map.containsKey(num)){
map.get(num).add(i);if(map.get(num).size()>= m){int pre = map.get(num).get(map.get(num).size()- m);
pt =Math.max(pt, pre);}}else{List list =newLinkedList();
list.add(i);
map.put(num, list);}
res += pt +1;}System.out.println(res);}