LeetCode 0665. Non-decreasing Array非递减数列【Easy】【Python】【贪心】

Problem

LeetCode

Given an array with n integers, your task is to check if it could become non-decreasing by modifying at most 1 element.

We define an array is non-decreasing if array[i] <= array[i + 1] holds for every i (1 <= i < n).

Example 1:

Input: [4,2,3]
Output: True
Explanation: You could modify the first 4 to 1 to get a non-decreasing array.

Example 2:

Input: [4,2,1]
Output: False
Explanation: You can't get a non-decreasing array by modify at most one element.

Note: The n belongs to [1, 10,000].

问题

力扣

给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。

我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。

示例 1:

输入: [4,2,3]
输出: True
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。

示例 2:

输入: [4,2,1]
输出: False
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

说明: n 的范围为 [1, 10,000]。

思路

贪心

法一

用两个数组 nums1,nums2,分别复制 nums。当 nums[i] > nums[i+1] 时,nums1 变大,nums2 变小。仅进行一次改变就退出。然后比较 nums1 和排序之后的 nums1,以及比较 nums2 和排序之后的 nums2,只要有一个是相等的就返回 True。

时间复杂度: O(len(nums))
空间复杂度: O(len(nums))

法二

计数器 cnt 记录,遍历 nums,当 nums[i] > nums[i+1] 时,cnt 加一,然后分两种情况,一种是变得,一种是变小,详情可以看下面的代码注释。

时间复杂度: O(len(nums))
空间复杂度: O(1)

Python代码

class Solution(object):def checkPossibility(self, nums):""":type nums: List[int]:rtype: bool"""# # solution one# if len(nums) <= 2:#     return True# nums1, nums2= nums[:], nums[:]# for i in range(len(nums)-1):#     if nums[i] > nums[i+1]:#         nums1[i] = nums[i+1]  # change bigger#         nums2[i+1] = nums[i]  # change smaller#         break  # only change once, then break# return nums1 == sorted(nums1) or nums2 == sorted(nums2)# solution twoif len(nums) <= 2:return Truecnt = 0for i in range(1, len(nums)):if nums[i-1] > nums[i]:cnt += 1if i == 1 or nums[i-2] <= nums[i]:  # 3,5,4 -> 3,4,4nums[i-1] = nums[i]else:  # 4,5,4 -> 4,5,5nums[i] = nums[i-1]if cnt > 1:return Falsereturn True

代码地址

GitHub链接

LeetCode | 0665. Non-decreasing Array非递减数列【Python】相关推荐

  1. LeetCode 665. 非递减数列(双指针)

    1. 题目 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i ...

  2. leetcode 665. 非递减数列(贪心算法)

    给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n ...

  3. LeetCode 665 非递减数列

    题目描述 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一 个非递减数列.我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i &l ...

  4. 665. 非递减数列 golang 切片越界问题的探讨(二)

    思路 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < ...

  5. 665. 非递减数列

    给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n ...

  6. 力扣665. 非递减数列

    题目 给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= ...

  7. LeetCode-665:非递减数列

    题目描述: 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i & ...

  8. 非递减数列JAVA_C语言实现两个递减数列中寻找某一个数

    本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用.具体方法如下: 通常来说这道题算二分查找法中非常有难度的一题了. 题目如下: 一个数组是由一个递减数列左移若干位形成 ...

  9. leetcode 665. Non-decreasing Array | 665. 非递减数列(Java)

    题目 https://leetcode.com/problems/non-decreasing-array/ 题解 一开始思路有问题,忽略了一些情况,见草稿. 第一次提交没过,根据 test case ...

  10. leetcode 77. Combinations-排列|递归|非递归|Java|Python

    原题链接:77. Combinations [思路-Java.Python]递归实现 采用回溯算法.这是一道 NP 难问题,时间复杂度没办法提高,用一个循环递归处理子问题,问题的终止条件是每个组合中的 ...

最新文章

  1. 【转】mysql增量备份恢复实战企业案例
  2. java 项目保存日志到本地_Springboot项目使用Slf4j将日志保存到本地目录
  3. Nginx+Tomcat集群与负载均衡
  4. java监控对话框是否关闭_java – 检查是否可以安全地关闭对话框
  5. ListView上移 和下移
  6. matlab储备池算法,储备池计算概述.pdf
  7. LeetCode 360. 有序转化数组(抛物线对称轴)
  8. 奔腾双核linux服务器,Dell推出双核心奔腾服务器
  9. 史上最狠降价!锤子加速清仓直降2200,买的人却很少
  10. C++ 拷贝构造函数
  11. Flutter 自定义图片按钮,按下效果及按键音效
  12. Coin3d用vs2010编译
  13. BJUI--data-rule规则及自定义
  14. 高中生自我评语 高中毕业生自我鉴定
  15. QQ签名资料特殊字符大全
  16. 《夜深人静写算法》数论篇 - (22) 卢卡斯定理
  17. 如何理解国产操作系统,现状又是如何?
  18. 记参加哈工大SCIR(赛尔)实验室笔试
  19. createCaptureSession()
  20. java 文件尾部_java 在file的尾部添加数据的两种方法总结

热门文章

  1. 春季高考计算机专业课试题,春季高考计算机试题总结
  2. idea 下载vue 插件
  3. Shell的解释和一些用法
  4. 奈奎斯特与香农定理_大神带你理解奈奎斯特定理和香农定理
  5. 【Python数据分析学习实例】计算某个函数的一阶导数、二阶导数,并绘出图像
  6. caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist`
  7. 国外著名博客 Gizmodo 博主 Brian Lam 访谈录
  8. 揭秘工业互联网的内涵、热点与难点!
  9. linux企业实战-haproxy(2)动静分离
  10. 如何使用阿里云进行人脸和身份证头像验证比对(人证核验接口API)--java