class Solution {
public:
bool canBeIncreasing(vector<int>& nums) {
}
};
1909. 删除一个元素使数组严格递增
给你一个下标从 0 开始的整数数组 nums
,如果 恰好 删除 一个 元素后,数组 严格递增 ,那么请你返回 true
,否则返回 false
。如果数组本身已经是严格递增的,请你也返回 true
。
数组 nums
是 严格递增 的定义为:对于任意下标的 1 <= i < nums.length
都满足 nums[i - 1] < nums[i]
。
示例 1:
输入:nums = [1,2,10,5,7] 输出:true 解释:从 nums 中删除下标 2 处的 10 ,得到 [1,2,5,7] 。 [1,2,5,7] 是严格递增的,所以返回 true 。
示例 2:
输入:nums = [2,3,1,2] 输出:false 解释: [3,1,2] 是删除下标 0 处元素后得到的结果。 [2,1,2] 是删除下标 1 处元素后得到的结果。 [2,3,2] 是删除下标 2 处元素后得到的结果。 [2,3,1] 是删除下标 3 处元素后得到的结果。 没有任何结果数组是严格递增的,所以返回 false 。
示例 3:
输入:nums = [1,1,1] 输出:false 解释:删除任意元素后的结果都是 [1,1] 。 [1,1] 不是严格递增的,所以返回 false 。
示例 4:
输入:nums = [1,2,3] 输出:true 解释:[1,2,3] 已经是严格递增的,所以返回 true 。
提示:
2 <= nums.length <= 1000
1 <= nums[i] <= 1000
原站题解
java 解法, 执行用时: 0 ms, 内存消耗: 40.4 MB, 提交时间: 2023-09-27 14:59:25
class Solution { public boolean canBeIncreasing(int[] nums) { int cnt = 0; for (int i = 1; i < nums.length && cnt <= 1; i++) { if (nums[i] > nums[i - 1]) continue; cnt++; if (i - 1 > 0 && nums[i] <= nums[i - 2]) { nums[i] = nums[i - 1]; } //else { //nums[i - 1] = nums[i]; //} } return cnt <= 1; } }
python3 解法, 执行用时: 52 ms, 内存消耗: 15.8 MB, 提交时间: 2023-09-27 14:59:07
class Solution: def canBeIncreasing(self, nums: List[int]) -> bool: n = len(nums) # 检查数组 nums 在删去下标为 idx 的元素后是否严格递增 def check(idx: int) -> bool: for i in range(1, n - 1): prev, curr = i - 1, i if prev >= idx: prev += 1 if curr >= idx: curr += 1 if nums[curr] <= nums[prev]: return False return True for i in range(1, n): # 寻找非递增相邻下标对 if nums[i] <= nums[i-1]: return check(i) or check(i - 1) return True
cpp 解法, 执行用时: 4 ms, 内存消耗: 10.2 MB, 提交时间: 2023-09-27 14:58:52
class Solution { public: bool canBeIncreasing(vector<int>& nums) { int n = nums.size(); // 检查数组 nums 在删去下标为 idx 的元素后是否严格递增 auto check = [&](const int idx) -> bool{ for (int i = 1; i < n - 1; ++i){ int prev = i - 1; if (prev >= idx){ ++prev; } int curr = i; if (curr >= idx){ ++curr; } if (nums[curr] <= nums[prev]){ return false; } } return true; }; for (int i = 1; i < n; ++i){ // 寻找非递增相邻下标对 if (nums[i] <= nums[i-1]){ return check(i - 1) || check(i); } } return true; } };
golang 解法, 执行用时: 4 ms, 内存消耗: 2.8 MB, 提交时间: 2021-07-01 17:48:31
func canBeIncreasing(nums []int) bool { n := len(nums) cnt := 0 for i := 1; i < n && cnt <= 1; i++ { if nums[i] > nums[i-1] { continue } cnt++ if i > 1 && nums[i] <= nums[i-2] { nums[i] = nums[i-1] } else { nums[i-1] = nums[i] } } return cnt <= 1 }