leetcode-665-Non-decreasing Array
题目描述:
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 first4to1to 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].
要完成的函数:
bool checkPossibility(vector<int>& nums)
说明:
1、这道题目给定一个vector,要判断这个vector至多改变一个元素的值之后,是不是变成了非减序列。
首先笔者想的是,比如序列[1,4,2,3],这个序列改变4的值也就可以了,这样子的序列中间必然会有一个凸起,4就是这个凸起。
那我们可以先找到这个凸起,从前往后找跟从后往前找,如果只有一个凸起的话,那么就接着判断,如果有多个凸起,那么必定不能只改一个元素。
部分代码如下:
int s1=nums.size();
int i=,j=s1-;
while(i<s1-)
{
if(nums[i]<=nums[i+])
i++;
else
break;
}
if(i==j)//当整个序列非降序排列
return true;
while(j>i)
{
if(nums[j]>=nums[j-])
j--;
else
break;
}
if((j-)!=i)//如果中间有多个元素
return false;
这样子就记录了i和j的值。
2、当确实只有一个凸起时,我们进行下一步判断。
还是以上面提到的序列为例子,[1,4,2,3],i=1,j=2,这个凸起的形成是由于nums[i]>nums[j],那我们可以改i这一位的值,也可以改j这一位的值,使得nums[i]<=nums[j]。
怎么判断什么时候要改i的值,什么时候要改j的值?
比如[3,4,2,5],i=1,j=2,这时候由于nums[i]的前一位3,大于nums[j]=2,所以我们只能修改j这一位的值,而不能修改i这一位的值。
那如果nums[i]的值,还是比nums[j]的下一位大呢,这时候我们就算修改j这一位的值,修改完也不能形成非减序列,这时候就要返回false。
如果nums[i]的值,小于等于nums[j]的下一位,那这时候就要返回true了。
还有另一种情况,如果nums[i]的前一位,小于等于nums[j],比如上面提到的[1,4,2,3],i=1,j=2,那这时候我们就可以修改i的值了,直接返回true即可。
代码如下:
if(i!=)
{
if(nums[i-]>nums[j])//只能改j这一位
{
if(j==s1-)
return true;
if(nums[i]>nums[j+])
return false;
return true;
}
else
return true;
}
return true;//如果i==0,那么直接修改nums[i]的值就可以了
上述代码虽然考虑的过程繁琐了点,但是实测38ms,beats 86.96% of cpp submissions,效果还是可以的。
3、附上完整代码,分享给大家,如下:
bool checkPossibility(vector<int>& nums)
{
int s1=nums.size();
int i=,j=s1-;
while(i<s1-)
{
if(nums[i]<=nums[i+])
i++;
else
break;
}
if(i==j)
return true;
while(j>i)
{
if(nums[j]>=nums[j-])
j--;
else
break;
}
if((j-)!=i)
return false;
if(i!=)
{
if(nums[i-]>nums[j])//只能改j这一位
{
if(j==s1-)
return true;
if(nums[i]>nums[j+])
return false;
return true;
}
elsereturn true;
}
return true;
}
leetcode-665-Non-decreasing Array的更多相关文章
- 【LeetCode】659. Split Array into Consecutive Subsequences 解题报告(Python)
[LeetCode]659. Split Array into Consecutive Subsequences 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...
- LeetCode 665. 非递减数列(Non-decreasing Array)
665. 非递减数列 665. Non-decreasing Array 题目描述 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是 ...
- LeetCode 665. Non-decreasing Array (不递减数组)
Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...
- Leetcode 665. Non-decreasing Array(Easy)
Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...
- LeetCode算法题-Non-decreasing Array(Java实现)
这是悦乐书的第283次更新,第300篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第151题(顺位题号是665).给定一个包含n个整数的数组,您的任务是通过修改最多1个元 ...
- 【LeetCode】896. Monotonic Array 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【LeetCode题解】数组Array
1. 数组 直观地看,数组(Array)为一个二元组<index, value>的集合--对于每一个index,都有一个value与之对应.C语言中,以"连续的存储单元" ...
- LeetCode 238. Product of Array Except Self (去除自己的数组之积)
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...
- LeetCode 108. Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树)
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 题目 ...
- LeetCode 88. Merge Sorted Array(合并有序数组)
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
随机推荐
- javascript对变量和函数的声明提前‘hoist’
hoist vt.升起,提起; vi.被举起或抬高; n.起重机,升降机; 升起; <俚>推,托,举; 原文地址:http://www.bootcss.com/article/variab ...
- asp.net 母版页使用详解
母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实现了代码的重用.它就像婚纱影楼中的婚纱模板,同一个婚纱模板可以给不同的新人用,只要把他们的照片贴在已有的婚纱模板就可以形 ...
- vmware centos7 静态ip设置
最近在学习linux环境部署~~~~ 首先,将网络适配设置成为桥接模式 查看本机IP地址,ipconfig,记住ipv4地址和默认网关地址,等会配置的时候要用 启动Centos,进入终端模式,设置IP ...
- [C++] right value reference
the advantage of right value reference: Memory Optimization save memory copy
- qy Undefied index报错
目测是不支持如下写法 $value['status'] = $map[$value['status']];
- 虚拟机上linux与windows之间复制粘贴
参考:https://blog.csdn.net/qq_34501940/article/details/51222119
- ui界面使用 DialogMonitorOPS 问题
-- 是类主要是实现对界面上元素的处理.实现效果的处理 struct gt_cl_hp_uiName ( fn help = ( gt_10000_help = " 类主要是实现对界面上元素 ...
- vs2015 debugger,unable to attach to application iisexpress.exe
vs2015 unable to attach to application iisexpress.exe,没有可用的数据了 搞了一天也没解决...
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptDao_a' defined in class path resource [beansAndHibernate.xml]: Cannot resolve reference to bean 'sessionFact
Error creating bean with name 'deptDao_a' defined in class path 因为更改了类的名字,所以其setter方法没有更改,需要 private ...
- CoderForces 687C The Values You Can Make (01背包,DP)
题意:给定 n 个硬币和一个值 k,问你在用一些硬币组成面值为 k的这些硬币还能组成多少种其他面值. 析:如果这样说,由这些硬币能组成多少种不同的面值,那么是不是就很熟悉了,这不就是01背包么,这个题 ...