Leetcode 3468. Find the Number of Copy Arrays
- 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 + d
y = rb + d
if x > r or y < l:
return 0
lb += max(0, l - x)
rb -= max(0, y - r)
if lb > rb:
return 0
return rb-lb+1
提交代码评测得到:耗时61ms,占用内存64.3MB。