前言
参加周赛做的第一题,emm,写了好久都过不了,哎,在此记录一下,希望能帮助理解
5780. 删除一个元素使数组严格递增
题意:
解题思路
如果存在非递增的情况,从数组的排列上看,必有一个点使得向上的趋势往下坠落。即当遍历到下标i,有nums[i]<nums[i-1]时,对nums[i],nums[i-1],nums[i-2]三个数,此时分别有两种情况:
情况一:
当前数nums[i]<nums[i-1],但nums[i]大于nums[i-2],如下图中,5<10但5>2
针对这种情况,移除nums[i-1],但当遍历到i+1时,nums[i+1]仍然与nums[i]进行比较
情况二:
当前数nums[i]<nums[i-1],但nums[i]小于nums[i-2],如下图,4<10并且4<6
针对这种情况,只能移除nums[i],当遍历到i+1时,使得nums[i+1]与nums[i-1]进行比较
代码:
public boolean canBeIncreasing(int[] nums) {
//用count表达向上的趋势往下坠落这种情况出现多少次
int count = 0;
//用tmp来保存上一个用于比较的数
int tmp = nums[0];
for (int i=1; i<nums.length; i++){
if (nums[i] > tmp){
tmp = nums[i];
}else {
count ++;
if (i>1 &&nums[i]<=nums[i-2]){
//相当于删除nums[i]
tmp = nums[i-1];
}else {
//tmp依旧置为当前数,相当于删除nums[i-1]
tmp = nums[i];
}
}
}
return count <= 1;
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END