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