1. 解题思路
这一题没有自力搞定,是看了大佬的代码才搞明白的。其实还是一个有序数列的问题。
我们依次从头往后考察每一个位置作为结束位置时其之前各个x值下有多少种答案。此时,我们就需要维护一个0到 k − 1 k-1 k−1的数组,其每一位上的元素代表了对应元素的数组下的子序列的数目。
2. 代码实现
给出python代码实现如下:
class Solution:
def resultArray(self, nums: List[int], k: int) -> List[int]:
ans = [0 for _ in range(k)]
prev = [0 for _ in range(k)]
for x in nums:
r = x % k
cur = [0 for _ in range(k)]
for t in range(k):
cur[(t*r) % k] += prev[t]
cur[r] += 1
for t in range(k):
ans[t] += cur[t]
prev[t] = cur[t]
return ans
提交代码评测得到:耗时554ms,占用内存31.9MB。