用Python编写程序检查查询找到的有效算术序列的数量
假设我们有一个名为nums的数字列表并且还有一个查询列表。每个查询元素都包含[i,j]。因此,此查询询问是否[nums中的子列表,范围在[i,j](包括两个范围)之间]是等差数列。因此,最后我们必须找到返回true的查询计数。
因此,如果输入如下nums = [2, 4, 6, 8, 7, 6, 5, 2],queries = [[3, 4],[0, 3],[2, 4]],则输出将是2,因为[2,4,6,8]是一个等差数列,所以查询[0,3]是真的。对于[8,7]也是等差数列,所以查询[3,4]也是真的。但是[6,8,7]不是等差数列,所以[2,4]不正确。
为了解决这个问题,我们将遵循以下步骤−
- 如果nums为空,则
- 返回0
- n:nums的大小
- diff:一个具有元素(nums [i + 1] – nums [i])的列表,对于每个i在0到n-2的范围内
- rle:大小为(n-1)的列表,并填充为0
- 对于范围从0到n-2的i,执行
- 如果i > 0并且diff [i]与diff [i-1]相同,则
- rle [i]:= rle [i-1] + 1
- 否则,
- rle [i]:= 1
- 如果i > 0并且diff [i]与diff [i-1]相同,则
- ans:= 0
- 对于查询中的每个(i,j),执行
- 如果i与j相同,则
- ans:= ans + 1
- 否则,
- ans:= ans +(1如果rle [j-1]≥(j-i),否则0)
- 如果i与j相同,则
- 返回ans
例子
让我们看一下以下实现以更好地理解−