【leetcode】1144. Decrease Elements To Make Array Zigzag
2024-08-27 20:01:51
题目如下:
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: 4Constraints:
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
最新文章
- L2/L3/L4 Switch简介
- js动态的把左边列表添加到右边,可上下移动。
- oracle exp imp 导入 正在跳过表 plsql 导入表 成功终止 数据 被导入
- thinkphp关联模型的用法
- Android之ViewDragHelper
- Inno Setup设置NT服务
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
- POJ 2689
- c#中传递参数前加out
- 基于visual Studio2013解决C语言竞赛题之0407最大值最小值
- MPI编程简述
- 把玩Alpine linux(一):安装
- 设置 Visual Studio IIS Express 站点局域网访问
- 骨骼动画的原理及在Unity中的使用
- bing背单词交互流程 - Chongyang Bai
- 微信小程序初窥-环境搭建
- Hadoop生态圈-Flume的组件之自定义拦截器(interceptor)
- Python3之外部文件调用Django程序操作model等文件实现
- SP Flash Tool New Version v5.1352.01
- Sublime Text3 使用总结
热门文章
- js验证:密码只能为大写字母+小写字母+数字的8至15位字符组合
- Gradle之Android Gradle Plugin 主要 Task 分析(三)
- Golang基础(3):数组,切片和字典
- Visdom可视化
- 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题
- 无法识别的配置节log4net的(Unrecognized configuration section log4net)
- JAVA知识点总结(六)(集合)
- Spring aop 实例(转)
- spring boot 枚举使用的坑3
- 小程序中页面兼容h5标签的解析