题目:
非递减数列
解题思路:
根据相邻两项的大小关系分情况讨论,然后通过值不同的两项与递减的两项的数量来筛选非递减数列,最后找出不符合题目条件的前后两项并输出为假,其它情况输出为真。
代码:
bool checkPossibility(int* nums, int numsSize){
int count = 0;
if (numsSize < 3)
return true;
for (int i = 1 ; i < numsSize ; i++){
if (nums[i-1]>nums[i])
count++;
if (count==2)
return false;
else
if (nums[0]==nums[numsSize-1]&nums[1]<nums[numsSize-2]&nums[1]>nums[2])
return false;
if (numsSize>3&nums[0] > nums[2]&nums[numsSize-3] > nums[numsSize-1])
return false;
if (numsSize > 2*i+2&nums[i] > nums[numsSize-i-1]&nums[0]>nums[2])
return false;
if (nums[2]>nums[numsSize-1]&nums[1]>nums[numsSize-2])
return false;
for (int j = numsSize-1 ; j >i; j--){
if (nums[i+1]>nums[i]&nums[j]>nums[j-1]&nums[j]-nums[i]==1&j-i>2)
return false;
}
}
return true;
}
链接:探分支,筛答案
Leetcode 题解 - 多路并行
参与讨论
还没有评论呢!