已通过牛客测试。

首项的三种可能

等差的 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