当前位置: 面试刷题>> 不下降数组 (经典算法题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 示例代码 ```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 示例代码 ```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 示例代码 ```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); ``` **码小课网站中有更多相关内容分享给大家学习**,涵盖了各种编程算法和数据结构的深入解析,欢迎访问码小课网站获取更多学习资源。
推荐面试题