已通过牛客测试。
首项的三种可能
等差的 5 种可能
形成 15 种等差数列
class Solution: def judge_01(self, nums): # 判断是否只是 +1、 -1 和 不改变 操作实现。 for num in nums: if num not in [-1, 0, 1]: return False return True def solve(self , n , b ): # write code here # n 是数组的长度 # b 是数组 if n <= 2: # 数组长度为 0、 1 或者 2,则一定是等差数列 return 0 res = float('inf') nums = b for s in range(nums[0] - 1, nums[0] + 2): # 首项的三种可能 d = abs(nums[1] - nums[0]) # 等差的 5 种可能 for d in range(d - 2, d + 3): # 形成 15 种等差数列 nums_new = [s + d * i for i in range(len(nums))] # 每一种用户 原数据作差对比 diff = [nums_new[i] - nums[i] for i in range(len(nums))] if self.judge_01(diff): # 统计最少的 操作次数,作为随后的输出。 res = min(sum([abs(i) for i in diff]), res) return -1 if res == float('inf') else res