classSolution{publicintpivotIndex(int[] nums){int n = nums.length;int[] f =newint[n];int[] g =newint[n];//此时f要从左向右填写,因为后一个要根据前一个填写for(int i =1;i < n;i++){ f[i]= f[i-1]+ nums[i-1];}for(int i = n-2;i >=0;i--){ g[i]= g[i+1]+ nums[i+1];}for(int i =0;i< n;i++){if(f[i]== g[i]){return i;}}return-1;}}
classSolution{publicint[]productExceptSelf(int[] nums){int n = nums.length;//一个前缀积和一个后缀积int[] f =newint[n];int[] g =newint[n];int[] ret =newint[n]; f[0]= g[n-1]=1;for(int i =1;i < n;i++){ f[i]= f[i-1]* nums[i-1];}for(int i = n -2;i >=0;i--){ g[i]= g[i+1]* nums[i+1];}for(int i =0; i<n;i++){ ret[i]= f[i]*g[i];}return ret;}}
classSolution{publicintsubarraySum(int[] nums,int k){Map<Integer,Integer> hash =newHashMap<>(); hash.put(0,1);int sum =0;//表示前缀和int ret =0;for(int num : nums){ sum += num; ret += hash.getOrDefault(sum - k,0);//更新结果 hash.put(sum,hash.getOrDefault(sum,0)+1);//将其放入hash中}return ret;}}
classSolution{publicintsubarraysDivByK(int[] nums,int k){Map<Integer,Integer> hash =newHashMap<>();//刚开始要先将0%k放入进去,也就是<0,1>,防止当 hash.put(0% k,1);int sum =0;int ret =0;for(int num : nums){ sum += num;int r =(sum % k + k)%k; ret += hash.getOrDefault( r,0); hash.put(r,hash.getOrDefault(r,0)+1);}return ret;}}
classSolution{publicintfindMaxLength(int[] nums){//此时可以将其0看成-1,此时就变成和为0的最长子数组的求解Map<Integer,Integer> hash =newHashMap<>();//当其[0,i]位置和为0时候,我们要从[0,-1]中找出和为0 hash.put(0,-1);int len =0;int sum =0;for(int i =0;i < nums.length ;i++){if(nums[i]==0){ sum -=1;}else{ sum +=1;}//从前面找和为sum,那后面和就为0,当然其j越靠前越好//因此如果已经有了和为sum,后面的就不用放进去了if(hash.containsKey(sum)){ len =Math.max(len,i - hash.get(sum));}else{//放入hash中 hash.put(sum,i);}}return len;}}