- Leetcode 3468. Find the Number of Copy Arrays
- 1. 解题思路
- 2. 代码实现
- 题目链接:3468. Find the Number of Copy Arrays
1. 解题思路
这一题的话思路上就是一个范围考察,显然,对于指定的copy方式,只要我们确定了第一个元素,事实上我们就可以唯一地求出整个数组,因此,我们只需要考察第一个元素的可选区间即可。
我们只需要分别取第一个元素的上下界,然后根据后续每一个元素的可选区间对其进行各自的修正,即可得到最终我们可取的第一个元素的区间范围,从而我们就能得到对应的可选的方法总数了。
2. 代码实现
给出python代码实现如下:
class Solution:def countArrays(self, original: List[int], bounds: List[List[int]]) -> int:n = len(original)delta = [x-original[0] for x in original]lb, rb = bounds[0][0], bounds[0][1]for d, (l, r) in zip(delta, bounds):x = lb + dy = rb + dif x > r or y < l:return 0lb += max(0, l - x)rb -= max(0, y - r)if lb > rb:return 0return rb-lb+1
提交代码评测得到:耗时61ms,占用内存64.3MB。