diff --git a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README.md b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README.md index 384e7acf0ee4b..b0847dbb5a630 100644 --- a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README.md +++ b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README.md @@ -43,6 +43,12 @@ +**方法一:模拟 + 哈希表** + +我们先求出数组 $nums$ 的最长顺序前缀和 $s$,然后从 $s$ 开始枚举整数 $x$,如果 $x$ 不在数组 $nums$ 中,那么 $x$ 就是答案。这里我们可以用哈希表来快速判断一个整数是否在数组 $nums$ 中。 + +时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 $nums$ 的长度。 + ### **Python3** @@ -52,8 +58,7 @@ ```python class Solution: def missingInteger(self, nums: List[int]) -> int: - s, n = nums[0], len(nums) - j = 1 + s, j = nums[0], 1 while j < len(nums) and nums[j] == nums[j - 1] + 1: s += nums[j] j += 1 @@ -70,9 +75,9 @@ class Solution: ```java class Solution { public int missingInteger(int[] nums) { - int s = nums[0], j = 1; - while (j < nums.length && nums[j] == nums[j - 1] + 1) { - s += nums[j++]; + int s = nums[0]; + for (int j = 1; j < nums.length && nums[j] == nums[j - 1] + 1; ++j) { + s += nums[j]; } boolean[] vis = new boolean[51]; for (int x : nums) { @@ -93,13 +98,13 @@ class Solution { class Solution { public: int missingInteger(vector& nums) { - int s = nums[0], j = 1; - while (j < nums.size() && nums[j] == nums[j - 1] + 1) { - s += nums[j++]; + int s = nums[0]; + for (int j = 1; j < nums.size() && nums[j] == nums[j - 1] + 1; ++j) { + s += nums[j]; } - bool vis[51]{}; + bitset<51> vis; for (int x : nums) { - vis[x] = true; + vis[x] = 1; } for (int x = s;; ++x) { if (x >= 51 || !vis[x]) { @@ -114,9 +119,9 @@ public: ```go func missingInteger(nums []int) int { - s, j := nums[0], 1 - for j < len(nums) && nums[j] == nums[j-1]+1 { - s, j = s+nums[j], j+1 + s := nums[0] + for j := 1; j < len(nums) && nums[j] == nums[j-1]+1; j++ { + s += nums[j] } vis := [51]bool{} for _, x := range nums { @@ -134,17 +139,13 @@ func missingInteger(nums []int) int { ```ts function missingInteger(nums: number[]): number { - let [s, j] = [nums[0], 1]; - const n = nums.length; - while (j < n && nums[j] === nums[j - 1] + 1) { - s += nums[j++]; - } - const vis: boolean[] = Array(51).fill(false); - for (const x of nums) { - vis[x] = true; + let s = nums[0]; + for (let j = 1; j < nums.length && nums[j] === nums[j - 1] + 1; ++j) { + s += nums[j]; } + const vis: Set = new Set(nums); for (let x = s; ; ++x) { - if (x >= vis.length || !vis[x]) { + if (!vis.has(x)) { return x; } } diff --git a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README_EN.md b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README_EN.md index f06cd41a40f6b..14f3dbce009fd 100644 --- a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README_EN.md +++ b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README_EN.md @@ -37,6 +37,12 @@ ## Solutions +**Solution 1: Simulation + Hash Table** + +First, we calculate the longest prefix sum $s$ of the array $nums$. Then, starting from $s$, we enumerate the integer $x$. If $x$ is not in the array $nums$, then $x$ is the answer. Here, we can use a hash table to quickly determine whether an integer is in the array $nums$. + +The time complexity is $O(n)$, and the space complexity is $O(n)$, where $n$ is the length of the array $nums$. + ### **Python3** @@ -44,8 +50,7 @@ ```python class Solution: def missingInteger(self, nums: List[int]) -> int: - s, n = nums[0], len(nums) - j = 1 + s, j = nums[0], 1 while j < len(nums) and nums[j] == nums[j - 1] + 1: s += nums[j] j += 1 @@ -60,9 +65,9 @@ class Solution: ```java class Solution { public int missingInteger(int[] nums) { - int s = nums[0], j = 1; - while (j < nums.length && nums[j] == nums[j - 1] + 1) { - s += nums[j++]; + int s = nums[0]; + for (int j = 1; j < nums.length && nums[j] == nums[j - 1] + 1; ++j) { + s += nums[j]; } boolean[] vis = new boolean[51]; for (int x : nums) { @@ -83,13 +88,13 @@ class Solution { class Solution { public: int missingInteger(vector& nums) { - int s = nums[0], j = 1; - while (j < nums.size() && nums[j] == nums[j - 1] + 1) { - s += nums[j++]; + int s = nums[0]; + for (int j = 1; j < nums.size() && nums[j] == nums[j - 1] + 1; ++j) { + s += nums[j]; } - bool vis[51]{}; + bitset<51> vis; for (int x : nums) { - vis[x] = true; + vis[x] = 1; } for (int x = s;; ++x) { if (x >= 51 || !vis[x]) { @@ -104,9 +109,9 @@ public: ```go func missingInteger(nums []int) int { - s, j := nums[0], 1 - for j < len(nums) && nums[j] == nums[j-1]+1 { - s, j = s+nums[j], j+1 + s := nums[0] + for j := 1; j < len(nums) && nums[j] == nums[j-1]+1; j++ { + s += nums[j] } vis := [51]bool{} for _, x := range nums { @@ -124,17 +129,13 @@ func missingInteger(nums []int) int { ```ts function missingInteger(nums: number[]): number { - let [s, j] = [nums[0], 1]; - const n = nums.length; - while (j < n && nums[j] === nums[j - 1] + 1) { - s += nums[j++]; - } - const vis: boolean[] = Array(51).fill(false); - for (const x of nums) { - vis[x] = true; + let s = nums[0]; + for (let j = 1; j < nums.length && nums[j] === nums[j - 1] + 1; ++j) { + s += nums[j]; } + const vis: Set = new Set(nums); for (let x = s; ; ++x) { - if (x >= vis.length || !vis[x]) { + if (!vis.has(x)) { return x; } } diff --git a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.cpp b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.cpp index 6081ba54c6b44..7c62998f9faa7 100644 --- a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.cpp +++ b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.cpp @@ -1,13 +1,13 @@ class Solution { public: int missingInteger(vector& nums) { - int s = nums[0], j = 1; - while (j < nums.size() && nums[j] == nums[j - 1] + 1) { - s += nums[j++]; + int s = nums[0]; + for (int j = 1; j < nums.size() && nums[j] == nums[j - 1] + 1; ++j) { + s += nums[j]; } - bool vis[51]{}; + bitset<51> vis; for (int x : nums) { - vis[x] = true; + vis[x] = 1; } for (int x = s;; ++x) { if (x >= 51 || !vis[x]) { diff --git a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.go b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.go index 26f4a6d360c78..66f75e6eabfdc 100644 --- a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.go +++ b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.go @@ -1,7 +1,7 @@ func missingInteger(nums []int) int { - s, j := nums[0], 1 - for j < len(nums) && nums[j] == nums[j-1]+1 { - s, j = s+nums[j], j+1 + s := nums[0] + for j := 1; j < len(nums) && nums[j] == nums[j-1]+1; j++ { + s += nums[j] } vis := [51]bool{} for _, x := range nums { diff --git a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.java b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.java index 14710bee62193..dab46c4c73ce8 100644 --- a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.java +++ b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.java @@ -1,8 +1,8 @@ class Solution { public int missingInteger(int[] nums) { - int s = nums[0], j = 1; - while (j < nums.length && nums[j] == nums[j - 1] + 1) { - s += nums[j++]; + int s = nums[0]; + for (int j = 1; j < nums.length && nums[j] == nums[j - 1] + 1; ++j) { + s += nums[j]; } boolean[] vis = new boolean[51]; for (int x : nums) { diff --git a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.py b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.py index 70bc58d87facf..4d288d1b77948 100644 --- a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.py +++ b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.py @@ -1,7 +1,6 @@ class Solution: def missingInteger(self, nums: List[int]) -> int: - s, n = nums[0], len(nums) - j = 1 + s, j = nums[0], 1 while j < len(nums) and nums[j] == nums[j - 1] + 1: s += nums[j] j += 1 diff --git a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.ts b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.ts index 97932f3652710..c74f1272fe506 100644 --- a/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.ts +++ b/solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.ts @@ -1,15 +1,11 @@ function missingInteger(nums: number[]): number { - let [s, j] = [nums[0], 1]; - const n = nums.length; - while (j < n && nums[j] === nums[j - 1] + 1) { - s += nums[j++]; - } - const vis: boolean[] = Array(51).fill(false); - for (const x of nums) { - vis[x] = true; + let s = nums[0]; + for (let j = 1; j < nums.length && nums[j] === nums[j - 1] + 1; ++j) { + s += nums[j]; } + const vis: Set = new Set(nums); for (let x = s; ; ++x) { - if (x >= vis.length || !vis[x]) { + if (!vis.has(x)) { return x; } }