6910. 将数组划分成若干好子数组的方式
# 6910. 将数组划分成若干好子数组的方式 (opens new window)
# 1.BigInteger
分析:总方法数等于所有相邻1之间的间隔距离的乘积。因为乘积结果会超过long,所以用BigInteger保存,并最后进行模运算。
import java.math.BigInteger;
class Solution {
public int numberOfGoodSubarraySplits(int[] nums) {
List<Integer> list=new ArrayList<>();
for(int i=0;i<nums.length;i++){
if(nums[i]==1)list.add(i);
}
BigInteger sum=BigInteger.valueOf(1);
if(list.size()==0) return 0;
for(int i=0;i<list.size()-1;i++){
int a=list.get(i),b=list.get(i+1);
sum=sum.multiply(BigInteger.valueOf(b-a));
}
return sum.remainder(BigInteger.valueOf(1000000007)).intValue();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2.乘法模运算
模运算定理
(a+b)mod m=((a mod m)+(b mod m)) mod m
(a*b)mod m=((a mod m)*(b mod m)) mod m
class Solution {
public int numberOfGoodSubarraySplits(int[] nums) {
List<Integer> list=new ArrayList<>();
for(int i=0;i<nums.length;i++){
if(nums[i]==1)list.add(i);
}
long sum=1;
if(list.size()==0) return 0;
for(int i=0;i<list.size()-1;i++){
int a=list.get(i),b=list.get(i+1);
sum=(sum*(b-a))%1000000007;
}
return (int)sum%1000000007;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57