已通过牛客测试。
首项的三种可能
等差的 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 
京公网安备 11010502036488号