题目如下:

Given an array nums of integers, a move consists of choosing any element and decreasing it by 1.

An array A is a zigzag array if either:

  • Every even-indexed element is greater than adjacent elements, ie. A[0] > A[1] < A[2] > A[3] < A[4] > ...
  • OR, every odd-indexed element is greater than adjacent elements, ie. A[0] < A[1] > A[2] < A[3] > A[4] < ...

Return the minimum number of moves to transform the given array nums into a zigzag array.

Example 1:

Input: nums = [1,2,3]
Output: 2
Explanation: We can decrease 2 to 0 or 3 to 1.

Example 2:

Input: nums = [9,6,1,6,2]
Output: 4

Constraints:

  • 1 <= nums.length <= 1000
  • 1 <= nums[i] <= 1000

解题思路:本题无外乎两种情况,一种是nums[0] > nums[1],另一种是nums[0] < nums[1],把这两种情况计算一遍求较小值即可。在计算过程中,如果要求nums[i] > nums[i-1],那么把nums[i-1] 减到nums[i] - 1;如果要求nums[i] < nums[i-1],则把nums[i]减少到nums[i-1] - 1。

代码如下:

class Solution(object):
def movesToMakeZigzag(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# flag - 0: decrease; 1:increase
def process(flag,nums):
count = 0
for i in range(1, len(nums)):
if flag == 0 and nums[i] >= nums[i - 1]:
count += (nums[i] - nums[i - 1] + 1)
nums[i] = nums[i - 1] - 1
elif flag == 1 and nums[i] <= nums[i - 1]:
count += (nums[i - 1] - nums[i] + 1)
nums[i - 1] = nums[i] - 1
flag = not flag
return count #nums[0] > nums[1]
res = process(0,nums[::])
# nums[1] > nums[0]
res = min(res,process(1,nums))
return res

最新文章

  1. L2/L3/L4 Switch简介
  2. js动态的把左边列表添加到右边,可上下移动。
  3. oracle exp imp 导入 正在跳过表 plsql 导入表 成功终止 数据 被导入
  4. thinkphp关联模型的用法
  5. Android之ViewDragHelper
  6. Inno Setup设置NT服务
  7. **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
  8. POJ 2689
  9. c#中传递参数前加out
  10. 基于visual Studio2013解决C语言竞赛题之0407最大值最小值
  11. MPI编程简述
  12. 把玩Alpine linux(一):安装
  13. 设置 Visual Studio IIS Express 站点局域网访问
  14. 骨骼动画的原理及在Unity中的使用
  15. bing背单词交互流程 - Chongyang Bai
  16. 微信小程序初窥-环境搭建
  17. Hadoop生态圈-Flume的组件之自定义拦截器(interceptor)
  18. Python3之外部文件调用Django程序操作model等文件实现
  19. SP Flash Tool New Version v5.1352.01
  20. Sublime Text3 使用总结

热门文章

  1. js验证:密码只能为大写字母+小写字母+数字的8至15位字符组合
  2. Gradle之Android Gradle Plugin 主要 Task 分析(三)
  3. Golang基础(3):数组,切片和字典
  4. Visdom可视化
  5. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题
  6. 无法识别的配置节log4net的(Unrecognized configuration section log4net)
  7. JAVA知识点总结(六)(集合)
  8. Spring aop 实例(转)
  9. spring boot 枚举使用的坑3
  10. 小程序中页面兼容h5标签的解析