首页 > 试题广场 >

牛牛构造等差数列

[编程题]牛牛构造等差数列
  • 热度指数:333 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛和牛妹在玩一个游戏,在他们面前有n个数,他们对每个数可以进行 +1 或 -1 操作,但对于每一个数,该操作最多只能执行一次。
游戏胜利的目标是:使用最少的操作次数,将这几个数构造成一个等差数列。
牛牛特别想赢得游戏,所以他想让你帮他写一个程序,得出最少多少次操作后能使这几个数变成一个等差数列,当然,如果完全不能构造成功,就输出-1。
示例1

输入

4,[24,21,14,10]

输出

3

说明

在第一个例子中,牛牛应该对第一个数字+1,对第二个数字-1,对第三个数字+1,而第四个数字应该保持不变。最后,序列就变成了[25,20,15,10],这是一个等差数列且操作次数最少。
示例2

输入

3,[14,5,1]

输出

-1

说明

在第二个例子中,不可能只对其中的数字最多操作一次就得到等差数列。

备注:




头像 东溪看水
发表于 2020-08-07 10:19:18
题目 给定 n 个数,对每个数可以进行 +1 或 -1 操作,但对于每一个数,该操作最多只能执行一次。目标是:使用最少的操作次数,将这几个数构造成一个等差数列。如果完全不能构造成功,就输出 -1。 解题思路 枚举序列 b 中前 2 个数的操作,每个数有 3 种操作(+1,-1,+0),所以共有 9 展开全文
头像 爱寂寞的时光
发表于 2021-09-03 21:25:25
单调队列解法,考虑任意端点 结尾的极大子区间,其满足区间内任意一子区间都不能满足条件。之后考虑 对不满足条件区间个数的贡献,加和即可。 时间复杂度 ,空间复杂度 。 class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请 展开全文
头像 obitoquilt
发表于 2020-08-03 11:54:08
用回溯算法做只过了60%, 不知道错在哪了,求大佬们赐教~ public class Solution { /** * 返回最少多少次操作后能使这几个数变成一个等差数列,如果完全不能构造成功,就返回-1 * @param n int整型 代表一共有n个数字 * 展开全文
头像 一加二加三
发表于 2020-08-31 14:26:47
已通过牛客测试。 首项的三种可能 等差的 5 种可能 形成 15 种等差数列 class Solution: def judge_01(self, nums): # 判断是否只是 +1、 -1 和 不改变 操作实现。 for num in nums: 展开全文