Дан массив nums, содержащий n различных чисел в диапазоне [0, n]. Верните единственное число в этом диапазоне, которого нет в массиве.
Пример:
Input: nums = [3,0,1]
Output: 2
Explanation: n = 3 since there are 3 numbers, so all numbers are in the range [0,3]. 2 is the missing number in the range since it does not appear in nums.
C# решение
сопоставлено/оригиналpublic class Solution {
public int MissingNumber(int[] nums) {
Array.Sort(nums);
if (nums[nums.Length - 1] != nums.Length) {
return nums.Length;
} else if (nums[0] != 0) {
return 0;
}
for (int i = 1; i < nums.Length; i++) {
int expectedNum = nums[i - 1] + 1;
if (nums[i] != expectedNum) {
return expectedNum;
}
}
return -1;
}
}
C++ решение
auto-draft, проверить перед отправкой#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 int MissingNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
if (nums[nums.size() - 1] != nums.size()) {
return nums.size();
} else if (nums[0] != 0) {
return 0;
}
for (int i = 1; i < nums.size(); i++) {
int expectedNum = nums[i - 1] + 1;
if (nums[i] != expectedNum) {
return expectedNum;
}
}
return -1;
}
}
Java решение
сопоставлено/оригиналclass Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
if (nums[nums.length-1] != nums.length) {
return nums.length;
} else if (nums[0] != 0) {
return 0;
}
for (int i = 1; i < nums.length; i++) {
int expectedNum = nums[i-1] + 1;
if (nums[i] != expectedNum) {
return expectedNum;
}
}
return -1;
}
}
JavaScript решение
сопоставлено/оригиналvar missingNumber = function(nums) {
nums.sort((a, b) => a - b)
if (nums[nums.length - 1] != nums.length) {
return nums.length
} else if (nums[0] != 0) {
return 0
}
for (let i = 1; i < nums.length; i++) {
let expectedNum = nums[i - 1] + 1
if (nums[i] != expectedNum) {
return expectedNum
}
}
return -1
}
Python решение
сопоставлено/оригиналclass Solution:
def missingNumber(self, nums):
nums.sort()
if nums[-1] != len(nums):
return len(nums)
elif nums[0] != 0:
return 0
for i in range(1, len(nums)):
expected_num = nums[i - 1] + 1
if nums[i] != expected_num:
return expected_num
return -1
Go решение
сопоставлено/оригиналfunc missingNumber(nums []int) int {
sort.Ints(nums)
if nums[len(nums)-1] != len(nums) {
return len(nums)
} else if nums[0] != 0 {
return 0
}
for i := 1; i < len(nums); i++ {
expectedNum := nums[i-1] + 1
if nums[i] != expectedNum {
return expectedNum
}
}
return -1
}
Algorithm
1️⃣
Сначала отсортируйте массив nums.
2️⃣
Проверьте особые случаи: убедитесь, что число 0 находится в начале массива, а число n — в конце.
3️⃣
Пройдитесь по отсортированному массиву и для каждого индекса проверьте, что число на этом индексе соответствует ожидаемому (предыдущее число плюс один). Как только вы обнаружите несоответствие, верните ожидаемое число.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.
Активных вакансий пока нет.