2020-02-04
1.题目描述
对于一个数组,返回能否改变其中的某个元素使得数组为非递减序列
2.题解
对于不满足非递减序列中的两个元素nums[i]、nums[i+1],存在两种情况,要不改
变nums[i]的值,要不改变nums[i+1]的值,然后判断改变后的是否满足条件即可。
3.代码
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int l=nums.size(),i,j,t;
for (i=0;i<l-1;i++){
if (nums[i]>nums[i+1]){
t=nums[i];
nums[i]=nums[i+1];
break;
}
}
for (j=0;j<l-1;j++){
if (nums[j]>nums[j+1]) break;
}
if (j>=l-1) return true;
if (i<l-1){
nums[i]=nums[i+1]=t;
}
for (j=0;j<l-1;j++){
if (nums[j]>nums[j+1]) break;
}
if (j>=l-1) return true;
return false;
}
};
int main(){
Solution s;
int a[3]={4,3,2};
vector<int>vec(a,a+3);
cout<<s.checkPossibility(vec)<<endl;
return 0;
}