LeetCode | 0665. Non-decreasing Array非递减数列【Python】
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】相关推荐
- LeetCode 665. 非递减数列(双指针)
1. 题目 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i ...
- leetcode 665. 非递减数列(贪心算法)
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n ...
- LeetCode 665 非递减数列
题目描述 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一 个非递减数列.我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i &l ...
- 665. 非递减数列 golang 切片越界问题的探讨(二)
思路 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < ...
- 665. 非递减数列
给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n ...
- 力扣665. 非递减数列
题目 给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= ...
- LeetCode-665:非递减数列
题目描述: 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i & ...
- 非递减数列JAVA_C语言实现两个递减数列中寻找某一个数
本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用.具体方法如下: 通常来说这道题算二分查找法中非常有难度的一题了. 题目如下: 一个数组是由一个递减数列左移若干位形成 ...
- leetcode 665. Non-decreasing Array | 665. 非递减数列(Java)
题目 https://leetcode.com/problems/non-decreasing-array/ 题解 一开始思路有问题,忽略了一些情况,见草稿. 第一次提交没过,根据 test case ...
- leetcode 77. Combinations-排列|递归|非递归|Java|Python
原题链接:77. Combinations [思路-Java.Python]递归实现 采用回溯算法.这是一道 NP 难问题,时间复杂度没办法提高,用一个循环递归处理子问题,问题的终止条件是每个组合中的 ...
最新文章
- 【转】mysql增量备份恢复实战企业案例
- java 项目保存日志到本地_Springboot项目使用Slf4j将日志保存到本地目录
- Nginx+Tomcat集群与负载均衡
- java监控对话框是否关闭_java – 检查是否可以安全地关闭对话框
- ListView上移 和下移
- matlab储备池算法,储备池计算概述.pdf
- LeetCode 360. 有序转化数组(抛物线对称轴)
- 奔腾双核linux服务器,Dell推出双核心奔腾服务器
- 史上最狠降价!锤子加速清仓直降2200,买的人却很少
- C++ 拷贝构造函数
- Flutter 自定义图片按钮,按下效果及按键音效
- Coin3d用vs2010编译
- BJUI--data-rule规则及自定义
- 高中生自我评语 高中毕业生自我鉴定
- QQ签名资料特殊字符大全
- 《夜深人静写算法》数论篇 - (22) 卢卡斯定理
- 如何理解国产操作系统,现状又是如何?
- 记参加哈工大SCIR(赛尔)实验室笔试
- createCaptureSession()
- java 文件尾部_java 在file的尾部添加数据的两种方法总结
热门文章
- 春季高考计算机专业课试题,春季高考计算机试题总结
- idea 下载vue 插件
- Shell的解释和一些用法
- 奈奎斯特与香农定理_大神带你理解奈奎斯特定理和香农定理
- 【Python数据分析学习实例】计算某个函数的一阶导数、二阶导数,并绘出图像
- caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist`
- 国外著名博客 Gizmodo 博主 Brian Lam 访谈录
- 揭秘工业互联网的内涵、热点与难点!
- linux企业实战-haproxy(2)动静分离
- 如何使用阿里云进行人脸和身份证头像验证比对(人证核验接口API)--java