Skip to content

Commit de625ff

Browse files
authored
feat: add solutions to lc problem: No.2996 (#2203)
1 parent 29339f4 commit de625ff

File tree

7 files changed

+63
-66
lines changed

7 files changed

+63
-66
lines changed

solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@
4343

4444
<!-- 这里可写通用的实现逻辑 -->
4545

46+
**方法一:模拟 + 哈希表**
47+
48+
我们先求出数组 $nums$ 的最长顺序前缀和 $s$,然后从 $s$ 开始枚举整数 $x$,如果 $x$ 不在数组 $nums$ 中,那么 $x$ 就是答案。这里我们可以用哈希表来快速判断一个整数是否在数组 $nums$ 中。
49+
50+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 $nums$ 的长度。
51+
4652
<!-- tabs:start -->
4753

4854
### **Python3**
@@ -52,8 +58,7 @@
5258
```python
5359
class Solution:
5460
def missingInteger(self, nums: List[int]) -> int:
55-
s, n = nums[0], len(nums)
56-
j = 1
61+
s, j = nums[0], 1
5762
while j < len(nums) and nums[j] == nums[j - 1] + 1:
5863
s += nums[j]
5964
j += 1
@@ -70,9 +75,9 @@ class Solution:
7075
```java
7176
class Solution {
7277
public int missingInteger(int[] nums) {
73-
int s = nums[0], j = 1;
74-
while (j < nums.length && nums[j] == nums[j - 1] + 1) {
75-
s += nums[j++];
78+
int s = nums[0];
79+
for (int j = 1; j < nums.length && nums[j] == nums[j - 1] + 1; ++j) {
80+
s += nums[j];
7681
}
7782
boolean[] vis = new boolean[51];
7883
for (int x : nums) {
@@ -93,13 +98,13 @@ class Solution {
9398
class Solution {
9499
public:
95100
int missingInteger(vector<int>& nums) {
96-
int s = nums[0], j = 1;
97-
while (j < nums.size() && nums[j] == nums[j - 1] + 1) {
98-
s += nums[j++];
101+
int s = nums[0];
102+
for (int j = 1; j < nums.size() && nums[j] == nums[j - 1] + 1; ++j) {
103+
s += nums[j];
99104
}
100-
bool vis[51]{};
105+
bitset<51> vis;
101106
for (int x : nums) {
102-
vis[x] = true;
107+
vis[x] = 1;
103108
}
104109
for (int x = s;; ++x) {
105110
if (x >= 51 || !vis[x]) {
@@ -114,9 +119,9 @@ public:
114119
115120
```go
116121
func missingInteger(nums []int) int {
117-
s, j := nums[0], 1
118-
for j < len(nums) && nums[j] == nums[j-1]+1 {
119-
s, j = s+nums[j], j+1
122+
s := nums[0]
123+
for j := 1; j < len(nums) && nums[j] == nums[j-1]+1; j++ {
124+
s += nums[j]
120125
}
121126
vis := [51]bool{}
122127
for _, x := range nums {
@@ -134,17 +139,13 @@ func missingInteger(nums []int) int {
134139

135140
```ts
136141
function missingInteger(nums: number[]): number {
137-
let [s, j] = [nums[0], 1];
138-
const n = nums.length;
139-
while (j < n && nums[j] === nums[j - 1] + 1) {
140-
s += nums[j++];
141-
}
142-
const vis: boolean[] = Array(51).fill(false);
143-
for (const x of nums) {
144-
vis[x] = true;
142+
let s = nums[0];
143+
for (let j = 1; j < nums.length && nums[j] === nums[j - 1] + 1; ++j) {
144+
s += nums[j];
145145
}
146+
const vis: Set<number> = new Set(nums);
146147
for (let x = s; ; ++x) {
147-
if (x >= vis.length || !vis[x]) {
148+
if (!vis.has(x)) {
148149
return x;
149150
}
150151
}

solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/README_EN.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,20 @@
3737

3838
## Solutions
3939

40+
**Solution 1: Simulation + Hash Table**
41+
42+
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$.
43+
44+
The time complexity is $O(n)$, and the space complexity is $O(n)$, where $n$ is the length of the array $nums$.
45+
4046
<!-- tabs:start -->
4147

4248
### **Python3**
4349

4450
```python
4551
class Solution:
4652
def missingInteger(self, nums: List[int]) -> int:
47-
s, n = nums[0], len(nums)
48-
j = 1
53+
s, j = nums[0], 1
4954
while j < len(nums) and nums[j] == nums[j - 1] + 1:
5055
s += nums[j]
5156
j += 1
@@ -60,9 +65,9 @@ class Solution:
6065
```java
6166
class Solution {
6267
public int missingInteger(int[] nums) {
63-
int s = nums[0], j = 1;
64-
while (j < nums.length && nums[j] == nums[j - 1] + 1) {
65-
s += nums[j++];
68+
int s = nums[0];
69+
for (int j = 1; j < nums.length && nums[j] == nums[j - 1] + 1; ++j) {
70+
s += nums[j];
6671
}
6772
boolean[] vis = new boolean[51];
6873
for (int x : nums) {
@@ -83,13 +88,13 @@ class Solution {
8388
class Solution {
8489
public:
8590
int missingInteger(vector<int>& nums) {
86-
int s = nums[0], j = 1;
87-
while (j < nums.size() && nums[j] == nums[j - 1] + 1) {
88-
s += nums[j++];
91+
int s = nums[0];
92+
for (int j = 1; j < nums.size() && nums[j] == nums[j - 1] + 1; ++j) {
93+
s += nums[j];
8994
}
90-
bool vis[51]{};
95+
bitset<51> vis;
9196
for (int x : nums) {
92-
vis[x] = true;
97+
vis[x] = 1;
9398
}
9499
for (int x = s;; ++x) {
95100
if (x >= 51 || !vis[x]) {
@@ -104,9 +109,9 @@ public:
104109
105110
```go
106111
func missingInteger(nums []int) int {
107-
s, j := nums[0], 1
108-
for j < len(nums) && nums[j] == nums[j-1]+1 {
109-
s, j = s+nums[j], j+1
112+
s := nums[0]
113+
for j := 1; j < len(nums) && nums[j] == nums[j-1]+1; j++ {
114+
s += nums[j]
110115
}
111116
vis := [51]bool{}
112117
for _, x := range nums {
@@ -124,17 +129,13 @@ func missingInteger(nums []int) int {
124129

125130
```ts
126131
function missingInteger(nums: number[]): number {
127-
let [s, j] = [nums[0], 1];
128-
const n = nums.length;
129-
while (j < n && nums[j] === nums[j - 1] + 1) {
130-
s += nums[j++];
131-
}
132-
const vis: boolean[] = Array(51).fill(false);
133-
for (const x of nums) {
134-
vis[x] = true;
132+
let s = nums[0];
133+
for (let j = 1; j < nums.length && nums[j] === nums[j - 1] + 1; ++j) {
134+
s += nums[j];
135135
}
136+
const vis: Set<number> = new Set(nums);
136137
for (let x = s; ; ++x) {
137-
if (x >= vis.length || !vis[x]) {
138+
if (!vis.has(x)) {
138139
return x;
139140
}
140141
}

solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
class Solution {
22
public:
33
int missingInteger(vector<int>& nums) {
4-
int s = nums[0], j = 1;
5-
while (j < nums.size() && nums[j] == nums[j - 1] + 1) {
6-
s += nums[j++];
4+
int s = nums[0];
5+
for (int j = 1; j < nums.size() && nums[j] == nums[j - 1] + 1; ++j) {
6+
s += nums[j];
77
}
8-
bool vis[51]{};
8+
bitset<51> vis;
99
for (int x : nums) {
10-
vis[x] = true;
10+
vis[x] = 1;
1111
}
1212
for (int x = s;; ++x) {
1313
if (x >= 51 || !vis[x]) {

solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
func missingInteger(nums []int) int {
2-
s, j := nums[0], 1
3-
for j < len(nums) && nums[j] == nums[j-1]+1 {
4-
s, j = s+nums[j], j+1
2+
s := nums[0]
3+
for j := 1; j < len(nums) && nums[j] == nums[j-1]+1; j++ {
4+
s += nums[j]
55
}
66
vis := [51]bool{}
77
for _, x := range nums {

solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
class Solution {
22
public int missingInteger(int[] nums) {
3-
int s = nums[0], j = 1;
4-
while (j < nums.length && nums[j] == nums[j - 1] + 1) {
5-
s += nums[j++];
3+
int s = nums[0];
4+
for (int j = 1; j < nums.length && nums[j] == nums[j - 1] + 1; ++j) {
5+
s += nums[j];
66
}
77
boolean[] vis = new boolean[51];
88
for (int x : nums) {

solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
class Solution:
22
def missingInteger(self, nums: List[int]) -> int:
3-
s, n = nums[0], len(nums)
4-
j = 1
3+
s, j = nums[0], 1
54
while j < len(nums) and nums[j] == nums[j - 1] + 1:
65
s += nums[j]
76
j += 1

solution/2900-2999/2996.Smallest Missing Integer Greater Than Sequential Prefix Sum/Solution.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
function missingInteger(nums: number[]): number {
2-
let [s, j] = [nums[0], 1];
3-
const n = nums.length;
4-
while (j < n && nums[j] === nums[j - 1] + 1) {
5-
s += nums[j++];
6-
}
7-
const vis: boolean[] = Array(51).fill(false);
8-
for (const x of nums) {
9-
vis[x] = true;
2+
let s = nums[0];
3+
for (let j = 1; j < nums.length && nums[j] === nums[j - 1] + 1; ++j) {
4+
s += nums[j];
105
}
6+
const vis: Set<number> = new Set(nums);
117
for (let x = s; ; ++x) {
12-
if (x >= vis.length || !vis[x]) {
8+
if (!vis.has(x)) {
139
return x;
1410
}
1511
}

0 commit comments

Comments
 (0)