665. Non-decreasing Array
Дан 数组 nums из n целых чисел. Ваша 题目 - проверить, можно ли сделать его неубывающим, изменив не более одного elementа.
Мы определяем 数组 как неубывающий, если для каждого i (индексация с 0), такого что 0 <= i <= n - 2, выполняется 题意 nums[i] <= nums[i + 1].
示例
Input: nums = [4,2,3]
Output: true
Explanation: You could modify the first 4 to 1 to get a non-decreasing array.
C# 解法
匹配/原始public class Solution {
public bool CheckPossibility(int[] nums) {
int count = 0;
for (int i = 1; i < nums.Length; i++) {
if (nums[i] < nums[i - 1]) {
if (count > 0) {
return false;
}
count++;
if (i == 1 || nums[i] >= nums[i - 2]) {
nums[i - 1] = nums[i];
} else {
nums[i] = nums[i - 1];
}
}
}
return true;
}
}
C++ 解法
自动草稿,提交前请检查#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public bool CheckPossibility(vector<int>& nums) {
int count = 0;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] < nums[i - 1]) {
if (count > 0) {
return false;
}
count++;
if (i == 1 || nums[i] >= nums[i - 2]) {
nums[i - 1] = nums[i];
} else {
nums[i] = nums[i - 1];
}
}
}
return true;
}
}
Java 解法
自动草稿,提交前请检查import java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public boolean CheckPossibility(int[] nums) {
int count = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[i] < nums[i - 1]) {
if (count > 0) {
return false;
}
count++;
if (i == 1 || nums[i] >= nums[i - 2]) {
nums[i - 1] = nums[i];
} else {
nums[i] = nums[i - 1];
}
}
}
return true;
}
}
Python 解法
匹配/原始class Solution:
def checkPossibility(self, nums: List[int]) -> bool:
count = 0
for i in range(1, len(nums)):
if nums[i] < nums[i - 1]:
if count > 0:
return False
count += 1
if i == 1 or nums[i] >= nums[i - 2]:
nums[i - 1] = nums[i]
else:
nums[i] = nums[i - 1]
return True
Go 解法
匹配/原始func checkPossibility(nums []int) bool {
count := 0
for i := 1; i < len(nums); i++ {
if nums[i] < nums[i-1] {
if count > 0 {
return false
}
count++
if i == 1 || nums[i] >= nums[i-2] {
nums[i-1] = nums[i]
} else {
nums[i] = nums[i-1]
}
}
}
return true
}
Algorithm
Инициализация переменных:
Завести переменную count для подсчета числа изменений.
Проверить последовательность чисел в 数组е nums.
Проверка условий:
Если nums[i] > nums[i + 1], то увеличиваем count.
Если count превышает 1, возвращаем false, так как больше одного изменения недопустимо.
Если nums[i - 1] > nums[i + 1] и nums[i] > nums[i + 2], то возвращаем false.
Возврат результата:
Если количество изменений не превышает 1, вернуть true.
😎
Vacancies for this task
活跃职位 with overlapping task tags are 已显示.