用于检查有多少查询在 Python 中找到有效算术序列的程序
假设我们有一个名为nums的数字列表,还有一个查询列表。其中每个查询元素都包含[i,j]。所以这个查询是询问来自[i,j](包括两个)的nums的子列表是否是一个等差数列。所以最后我们必须找到返回true的查询计数。
因此,如果输入类似于nums=[2,4,6,8,7,6,5,2]查询=[[3,4],[0,3],[2,4]],那么输出将为2,因为[2,4,6,8]是一个等差数列,所以查询[0,3]为真。因为[8,7]也是一个等差数列,所以查询[3,4]也成立。但是[6,8,7]不是等差数列,所以[2,4]不成立。
示例
让我们看看以下实现以获得更好的理解-
def solve(nums, queries): if not nums: return 0 n = len(nums) diff = [nums[i + 1] - nums[i] for i in range(n - 1)] rle = [0] * (n - 1) for i in range(n - 1): if i > 0 and diff[i] == diff[i - 1]: rle[i] = rle[i - 1] + 1 else: rle[i] = 1 ans = 0 for i, j in queries: if i == j: ans += 1 else: ans += rle[j - 1] >= (j - i) return ans nums = [2, 4, 6, 8, 7, 6, 5, 2] queries = [[3, 4],[0, 3],[2, 4]] print(solve(nums, queries))
输入
[2, 4, 6, 8, 7, 6, 5, 2], [[3, 4],[0, 3],[2, 4]]输出结果
2