У вас есть набор целых чисел s, изначально содержащий все числа от 1 до n. К сожалению, из-за какой-то ошибки один из номеров в s был продублирован другим номером в наборе, что привело к повторению одного номера и потере другого номера.
Вам дан целочисленный массив nums, представляющий состояние данных этого набора после ошибки.
Найдите число, которое встречается дважды, и число, которое отсутствует, и верните их в виде массива.
Пример 1:
Input: nums = [1,2,2,4] Output: [2,3]
Пример 2:
Input: nums = [1,1] Output: [1,2]
Ограничения:
2 <= nums.length <= 1041 <= nums[i] <= 104
Решения:
Питон:
class Solution(object):
def findErrorNums(self, nums):
nums.sort()
duplicate = -1
missing = -1
if nums[0] != 1:
missing = 1
for i in range(1, len(nums)):
if nums[i] - nums[i-1] > 1:
missing = nums[i-1] + 1
elif nums[i] - nums[i-1] == 0:
duplicate = nums[i]
if missing == -1:
missing = nums[-1] + 1
return [duplicate, missing]
c#:
public class Solution {
public int[] FindErrorNums(int[] nums) {
Array.Sort(nums);
int duplicate = -1;
int missing = -1;
if (nums[0] != 1)
{
missing = 1;
}
for (int i = 1; i < nums.Length; i++)
{
if (nums[i] - nums[i-1] > 1)
{
missing = nums[i-1] + 1;
}
else if (nums[i] - nums[i-1] == 0)
{
duplicate = nums[i];
}
}
if (missing == -1)
{
missing = nums[nums.Length - 1] + 1;
}
return new int[] { duplicate, missing };
}
}
Ява
class Solution {
public int[] findErrorNums(int[] nums) {
Arrays.sort(nums);
int duplicate = -1;
int missing = -1;
if (nums[0] != 1) {
missing = 1;
}
for (int i = 1; i < nums.length; i++) {
if (nums[i] - nums[i-1] > 1) {
missing = nums[i-1] + 1;
}
else if (nums[i] - nums[i-1] == 0) {
duplicate = nums[i];
}
}
if (missing == -1) {
missing = nums[nums.length - 1] + 1;
}
return new int[] { duplicate, missing };
}
}
JavaScript
/**
* @param {number[]} nums
* @return {number[]}
*/
var findErrorNums = function(nums) {
nums.sort((a, b) => a - b);
let duplicate = -1;
let missing = -1;
if (nums[0] !== 1) {
missing = 1;
}
for (let i = 1; i < nums.length; i++) {
if (nums[i] - nums[i-1] > 1) {
missing = nums[i-1] + 1;
}
else if (nums[i] - nums[i-1] === 0) {
duplicate = nums[i];
}
}
if (missing === -1) {
missing = nums[nums.length - 1] + 1;
}
return [duplicate, missing];
};
Типографический текст
function findErrorNums(nums: number[]): number[] {
nums.sort((a, b) => a - b);
let duplicate = -1;
let missing = -1;
if (nums[0] !== 1) {
missing = 1;
}
for (let i = 1; i < nums.length; i++) {
if (nums[i] - nums[i-1] > 1) {
missing = nums[i-1] + 1;
}
else if (nums[i] - nums[i-1] === 0) {
duplicate = nums[i];
}
}
if (missing === -1) {
missing = nums[nums.length - 1] + 1;
}
return [duplicate, missing];
};
PHP
class Solution {
/**
* @param Integer[] $nums
* @return Integer[]
*/
function findErrorNums($nums) {
sort($nums);
$duplicate = -1;
$missing = -1;
if ($nums[0] !== 1) {
$missing = 1;
}
for ($i = 1; $i < count($nums); $i++) {
if ($nums[$i] - $nums[$i-1] > 1) {
$missing = $nums[$i-1] + 1;
}
else if ($nums[$i] - $nums[$i-1] === 0) {
$duplicate = $nums[$i];
}
}
if ($missing === -1) {
$missing = $nums[count($nums) - 1] + 1;
}
return [$duplicate, $missing];
}
}
Надеюсь, это поможет! Дайте знать, если у вас появятся вопросы. Не забудьте подписаться, похлопать и оставить комментарий