1909. Remove One Element to Make the Array Strictly Increasing
Problem
Tags: Array
Given a 0-indexed integer array nums
, return true
if it can be made strictly increasing after removing exactly one element, or false
otherwise. If the array is already strictly increasing, return true
.
The array nums
is strictly increasing if nums[i - 1] < nums[i]
for each index (1 <= i < nums.length).
Example 1:
Input: nums = [1,2,10,5,7]
Output: true
Explanation: By removing 10 at index 2 from nums, it becomes [1,2,5,7].
[1,2,5,7] is strictly increasing, so return true.
Example 2:
Input: nums = [2,3,1,2]
Output: false
Explanation:
[3,1,2] is the result of removing the element at index 0.
[2,1,2] is the result of removing the element at index 1.
[2,3,2] is the result of removing the element at index 2.
[2,3,1] is the result of removing the element at index 3.
No resulting array is strictly increasing, so return false.
Example 3:
Input: nums = [1,1,1]
Output: false
Explanation: The result of removing any element is [1,1].
[1,1] is not strictly increasing, so return false.
Constraints:
2 <= nums.length <= 1000
1 <= nums[i] <= 1000
Code
JS
// 1909. Remove One Element to Make the Array Strictly Increasing (5/13/53455)
// Runtime: 68 ms (68.31%) Memory: 39.05 MB (94.77%)
/**
* @param {number[]} nums
* @return {boolean}
*/
var canBeIncreasing = function(nums) {
if(nums.length === 2) return true;
let fall = -1;
for(let i = 0; i < nums.length - 1; i++) {
if(nums[i] >= nums[i+1]) {
if(fall === -1) fall = i;
else return false;
}
}
if(fall === -1) return true;
if(fall === 0 || fall === nums.length - 2) return true;
let passed = false;
if(fall > 0) {
if(nums[fall-1] < nums[fall+1]) passed = true;
}
if(!passed && fall + 2 < nums.length) {
if(nums[fall] < nums[fall+2]) passed = true;
}
return passed;
};