2022.8.26 7:00pm
第一题
类似题:力扣1371. 每个元音包含偶数次的最长子字符串
求有多少个连续字串中所有的字母都出现了偶数次 - 狡啮之仰 - 博客园
第二题
解法(zjl给我做的)
import java.util.HashMap; public class code2 { public static void main(String []args){ int []A = new int[]{7,11,8,4,10}; int M=8; int [] arr = new int[A.length]; HashMap<Integer,Integer> map = new HashMap<>(); int sum=0; map.put(0,1); HashMap<Integer,Integer> set = new HashMap<>(); for(int i=0;i<arr.length-1;i++){ sum+=A[i+1]-A[i]; for(int j=M;j<=sum;j+=M){ if(map.containsKey(sum-j)){ set.put(i,i+1); } } map.put(sum,map.getOrDefault(sum,0)+1); } int count=0; int max=0; for(int key:set.keySet()){ int temp = key; count=2; while(set.containsKey(temp)){ count++; temp = set.get(temp); } if(max<count){ max = count; } } System.out.println(max); } }
经讨论这个写法有问题,比如M=3,A=[1,2,3,5,7,9]的话过不了case,我认为是set表存放数据有问题(我没看懂她放的啥),前半部分可以用她写的(不过还需要先sort,目前没sort的,如果是-3,0,8,10,4的话,10和4无法被扫到),后半部分用我的。前半部分将各个数据转换为了距离,可以规避负数的情况,很巧妙,
我的(时间复杂度更高):
public static int solution(int[] A,int M){ //ArrayList<Integer> arrayList=new ArrayList<>(); HashMap<Integer,Integer> map=new HashMap<>(); int max=1; for(int i=0;i<A.length;i++){ int value=0; for (int j=i+1;j<A.length;j++){ if((A[j]-A[i])%M==0){ value=value*10+j; } } if(value!=0){ map.put(i,value); } } //arrayList=new ArrayList<>(new HashSet<>(arrayList)); for(int key: map.keySet()){ int count=2; int temp=map.get(key); while (temp!=0) { int remain=temp%10; temp=temp/10; while (map.containsKey(remain)) { count++; remain = map.get(remain); } max = Math.max(max, count); } } return max; }
第三题
ac了,没记录(对比每个位置的元素,针对A[k]和B[k]不同的,选择最小的,注意有小于0以及A和B完全相等的情况(例3)
知识点:
1.Java中char和String的转换
Java中char和String的转换_耀凯考前突击大师的博客-CSDN博客
2.Java中list去重(用set元素不重复性)
Java中list去重(用set元素不重复性)_fjian123的博客-CSDN博客_java不允许重复的list
3.OutOfMemoryError报错
OutOfMemoryError系列(1): Java heap space_铁锚的博客-CSDN博客
4.位运算符详解(与,或,非,异或)
位运算符详解(与,或,非,异或)_Markble的博客-CSDN博客_位运算符
异或相当于不带进位的二进制加法
5. << 和 >>