【leetcode】3524 求出数组的X值1
题目链接
题目描述
给你一个正整数数组 nums 和一个正整数 k。
你可以对数组执行一次操作:移除不重叠的前缀和后缀(可以为空),留下一个连续非空子数组。
对于每一种留下的子数组,计算:
(该子数组的乘积) % k = x
你需要统计所有可能的结果 x ∈ [0, k-1] 出现的次数,返回一个长度为 k 的数组 result,其中:
result[x] 表示得到 x 作为余数的方案数
解题思路
你可以移除任意前缀和后缀,留下的是一个非空的连续子数组。
也就是说:我们其实是统计所有子数组的乘积模 k 的结果分布。
直接采用动态规划进行转移
class Solution {public long[] resultArray(int[] nums, int k) {long[] ans = new long[k];long[] lurminexod = new long[k];for (int i : nums) {long[] newlurminexod = new long[k];for (int j = 0; j < k; j++) {int index = (int)(((long)j * i) % k);newlurminexod[index] += lurminexod[j];}newlurminexod[i % k]++;lurminexod = newlurminexod;for (int j = 0; j < k; j++) {ans[j] += lurminexod[j];}}return ans;}
}