检查子数组的程序可以从算术序列重新排列或不在 Python 中重新排列
假设我们有数字序列nums,以及另外两个大小为m的数组l和r,这些l和r代表范围查询,如[l[i],r[i]]。我们必须找到一个布尔序列ans,其中当子数组nums[l[i]],nums[l[i]+1],...nums[r[i]-1]时ans[i]为真,nums[r[i]]可以被安排生成一个等差数列,否则为假。
如果一个序列至少由两个元素组成,并且每两个连续元素之间的差值相同,则称该序列是算术序列。例如,一些等差数列是:[2,4,6,8,10],[5,5,5,5],[4,-2,-8,-14],但不是[2,2,3,6,9]。
所以,如果输入像nums=[6,8,7,11,5,9],l=[0,0,2],r=[2,3,5],那么输出将是[True,假,真]因为-
对于查询[0,2],序列为[6,8,7],可以重新排列为[6,7,8],这是有效的
查询[0,3],序列为[6,8,7,11],不能重排等差数列
对于查询[2,5],序列为[7,11,5,9],可以重新排列为[5,7,9,11],这是有效的
示例
让我们看看以下实现以获得更好的理解-
def solve(nums, l, r): new = [True]*len(l) for i in range(len(l)): data = nums[l[i]:r[i]+1] data.sort() d = [] for j in range(len(data) - 1): d.append(data[j+1] - data[j]) d = list(set(d)) if len(d) != 1: new[i] = False return new nums = [6,8,7,11,5,9] l = [0,0,2] r = [2,3,5] print(solve(nums, l, r))
输入
[6,8,7,11,5,9], [0,0,2], [2,3,5]输出结果
[True,False,True]