1909. 删除一个元素使数组严格递增 - 力扣(LeetCode)



要判断给定数组 nums 是否能通过删除一个元素变成严格递增数组,可以按以下步骤思考和实现:
-
检查原始数组是否已经严格递增: 如果原始数组本身就符合严格递增条件,那么直接返回
true。 -
寻找破坏递增顺序的地方: 遍历数组,查找两个相邻元素
nums[i-1]和nums[i],其中nums[i-1] >= nums[i]。如果发现这样的不递增的地方,标记为可能需要删除的元素。 -
删除元素后验证递增性: 如果只找到一个破坏递增顺序的地方,那么尝试删除其中一个元素(
nums[i-1]或nums[i])后,验证删除后的数组是否仍然满足严格递增条件。如果删除后数组依然符合条件,则返回true,否则返回false。 -
处理多个破坏点的情况: 如果有多个不符合递增的地方,则返回
false,因为删除一个元素无法解决多个问题。
实现代码:
def canBeIncreasing(nums):
# 记录不满足递增关系的次数
count = 0
for i in range(1, len(nums)):
if nums[i-1] >= nums[i]:
count += 1
# 如果已经有超过一个不递增的点,则直接返回 False
if count > 1:
return False
# 检查删除 nums[i-1] 或 nums[i] 后是否可以满足严格递增
if i > 1 and nums[i-2] >= nums[i]:
# 删除 nums[i-1] 不行,必须删除 nums[i]
if i < len(nums)-1 and nums[i-1] >= nums[i+1]:
return False
return True
代码解释:
-
遍历数组:从第二个元素开始,检查每一对相邻元素
nums[i-1]和nums[i]是否满足递增条件nums[i-1] < nums[i]。 -
删除操作判断:当发现不递增的点时,检查删除哪个元素能够恢复递增性。
-
判断删除后是否递增:如果只有一个破坏递增顺序的点,尝试删除当前元素或前一个元素,判断是否能恢复递增。
例子:
# 示例 1:
nums = [1, 3, 2, 4]
print(canBeIncreasing(nums)) # 输出: True
# 示例 2:
nums = [1, 2, 1, 2]
print(canBeIncreasing(nums)) # 输出: False
这个方法能高效地判断是否可以通过删除一个元素使数组变为严格递增。
808

被折叠的 条评论
为什么被折叠?



