给你一个下标从 0 开始的整数数组 nums
。在一步操作中,你可以:
- 在范围
0 <= i < nums.length
内选出一个下标i
- 将
nums[i]
的值变为nums[i] + 1
或nums[i] - 1
返回将数组 nums
变为 非递增 或 非递减 所需的 最小 操作次数。
示例 1:
输入:nums = [3,2,4,5,0] 输出:4 解释: 一种可行的操作顺序,能够将 nums 变为非递增排列: - nums[1] 加 1 一次,使其变为 3 。 - nums[2] 减 1 一次,使其变为 3 。 - nums[3] 减 1 两次,使其变为 3 。 经过 4 次操作后,nums 变为 [3,3,3,3,0] ,按非递增顺序排列。 注意,也可以用 4 步操作将 nums 变为 [4,4,4,4,0] ,同样满足题目要求。 可以证明最少需要 4 步操作才能将数组变为非递增或非递减排列。
示例 2:
输入:nums = [2,2,3,4] 输出:0 解释:数组已经是按非递减顺序排列了,无需执行任何操作,返回 0 。
示例 3:
输入:nums = [0] 输出:0 解释:数组已经是按非递减顺序排列了,无需执行任何操作,返回 0 。
提示:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
进阶:你可以设计并实现时间复杂度为 O(n*log(n))
的解法吗?