当前位置: 面试刷题>> 不下降数组 (经典算法题500道)


题目描述补充

题目:不下降数组(Non-Decreasing Array)

给定一个整数数组 nums,你可以通过至多修改一个元素,使得修改后的数组满足非递减顺序(即每个元素不小于其前一个元素)。请返回修改后的数组。

注意

  • 数组长度在范围 [1, 3 * 10^4] 内。
  • 每个元素的取值范围在 [-2^31, 2^31 - 1] 内。

示例

示例 1:

输入: nums = [4,2,3]
输出: [4,3,3]
解释: 你可以将第二个元素修改为 3。

示例 2:

输入: nums = [4,2,1]
输出: [4,2,2]
解释: 注意,你不能改变第一个元素为比它小的值,所以你应该将第二个元素修改为 2。

PHP 示例代码

function fixNonDecreasingArray($nums) {
    $n = count($nums);
    $changed = false; // 标记是否修改了数组
    
    for ($i = 1; $i < $n; $i++) {
        if ($nums[$i] < $nums[$i - 1]) {
            if ($changed) {
                // 如果已经修改过,则只能将当前元素修改为前一个元素的值
                $nums[$i] = $nums[$i - 1];
            } else {
                // 否则,尝试修改前一个元素为当前元素的值,或者当前元素为前一个元素的值
                if ($i > 1 && $nums[$i] < $nums[$i - 2]) {
                    $nums[$i - 1] = $nums[$i];
                } else {
                    $nums[$i] = $nums[$i - 1];
                }
                $changed = true;
            }
        }
    }
    
    return $nums;
}

// 示例
$nums = [4, 2, 3];
$result = fixNonDecreasingArray($nums);
print_r($result);

Python 示例代码

def fixNonDecreasingArray(nums):
    n = len(nums)
    changed = False
    
    for i in range(1, n):
        if nums[i] < nums[i - 1]:
            if changed:
                # 已经修改过,只能修改当前元素
                nums[i] = nums[i - 1]
            else:
                # 尝试修改前一个元素或当前元素
                if i > 1 and nums[i] < nums[i - 2]:
                    nums[i - 1] = nums[i]
                else:
                    nums[i] = nums[i - 1]
                changed = True
                
    return nums

# 示例
nums = [4, 2, 3]
result = fixNonDecreasingArray(nums)
print(result)

JavaScript 示例代码

function fixNonDecreasingArray(nums) {
    const n = nums.length;
    let changed = false;
    
    for (let i = 1; i < n; i++) {
        if (nums[i] < nums[i - 1]) {
            if (changed) {
                // 已经修改过,只能修改当前元素
                nums[i] = nums[i - 1];
            } else {
                // 尝试修改前一个元素或当前元素
                if (i > 1 && nums[i] < nums[i - 2]) {
                    nums[i - 1] = nums[i];
                } else {
                    nums[i] = nums[i - 1];
                }
                changed = true;
            }
        }
    }
    
    return nums;
}

// 示例
const nums = [4, 2, 3];
const result = fixNonDecreasingArray(nums);
console.log(result);

码小课网站中有更多相关内容分享给大家学习,涵盖了各种编程算法和数据结构的深入解析,欢迎访问码小课网站获取更多学习资源。

推荐面试题