Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4eba269

Browse files
feat: add solutions to lc problem: No.2829 (doocs#4156)
No.2829.Determine the Minimum Sum of a k-avoiding Array
1 parent a7d1e56 commit 4eba269

File tree

8 files changed

+96
-44
lines changed

8 files changed

+96
-44
lines changed

‎solution/2800-2899/2829.Determine the Minimum Sum of a k-avoiding Array/README.md‎

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ tags:
4242
<strong>输入:</strong>n = 2, k = 6
4343
<strong>输出:</strong>3
4444
<strong>解释:</strong>可以构造数组 [1,2] ,其元素总和为 3 。
45-
可以证明不存在总和小于 3 的 k-avoiding 数组。
45+
可以证明不存在总和小于 3 的 k-avoiding 数组。
4646
</pre>
4747

4848
<p>&nbsp;</p>
@@ -61,9 +61,9 @@ tags:
6161

6262
### 方法一:贪心 + 模拟
6363

64-
我们从正整数 $i=1$ 开始,依次判断 $i$ 是否可以加入数组中,如果可以加入,则将 $i$ 加入数组中,累加到答案中,然后将 $k-i$ 置为已访问,表示 $k-i$ 不能加入数组中。循环直到数组长度为 $n$。
64+
我们从正整数 $i = 1$ 开始,依次判断 $i$ 是否可以加入数组中,如果可以加入,则将 $i$ 加入数组中,累加到答案中,然后将 $k - i$ 置为已访问,表示 $k-i$ 不能加入数组中。循环直到数组长度为 $n$。
6565

66-
时间复杂度 $O(n^2),ドル空间复杂度 $O(n^2)$。其中 $n$ 为数组长度。
66+
时间复杂度 $O(n + k),ドル空间复杂度 $O(n + k)$。其中 $n$ 为数组长度。
6767

6868
<!-- tabs:start -->
6969

@@ -77,9 +77,9 @@ class Solution:
7777
for _ in range(n):
7878
while i in vis:
7979
i += 1
80-
vis.add(i)
8180
vis.add(k - i)
8281
s += i
82+
i += 1
8383
return s
8484
```
8585

@@ -89,16 +89,15 @@ class Solution:
8989
class Solution {
9090
public int minimumSum(int n, int k) {
9191
int s = 0, i = 1;
92-
boolean[] vis = new boolean[k + n * n + 1];
92+
boolean[] vis = new boolean[n + k + 1];
9393
while (n-- > 0) {
9494
while (vis[i]) {
9595
++i;
9696
}
97-
vis[i] = true;
9897
if (k >= i) {
9998
vis[k - i] = true;
10099
}
101-
s += i;
100+
s += i++;
102101
}
103102
return s;
104103
}
@@ -112,17 +111,16 @@ class Solution {
112111
public:
113112
int minimumSum(int n, int k) {
114113
int s = 0, i = 1;
115-
bool vis[k + n * n + 1];
114+
bool vis[n + k + 1];
116115
memset(vis, false, sizeof(vis));
117116
while (n--) {
118117
while (vis[i]) {
119118
++i;
120119
}
121-
vis[i] = true;
122120
if (k >= i) {
123121
vis[k - i] = true;
124122
}
125-
s += i;
123+
s += i++;
126124
}
127125
return s;
128126
}
@@ -134,16 +132,16 @@ public:
134132
```go
135133
func minimumSum(n int, k int) int {
136134
s, i := 0, 1
137-
vis := make([]bool, k+n*n+1)
135+
vis := make([]bool, n+k+1)
138136
for ; n > 0; n-- {
139137
for vis[i] {
140138
i++
141139
}
142-
vis[i] = true
143140
if k >= i {
144141
vis[k-i] = true
145142
}
146143
s += i
144+
i++
147145
}
148146
return s
149147
}
@@ -155,21 +153,42 @@ func minimumSum(n int, k int) int {
155153
function minimumSum(n: number, k: number): number {
156154
let s = 0;
157155
let i = 1;
158-
const vis: boolean[] = Array(n *n+ k + 1);
156+
const vis: boolean[] = Array(n + k + 1).fill(false);
159157
while (n--) {
160158
while (vis[i]) {
161159
++i;
162160
}
163-
vis[i] = true;
164161
if (k >= i) {
165162
vis[k - i] = true;
166163
}
167-
s += i;
164+
s += i++;
168165
}
169166
return s;
170167
}
171168
```
172169

170+
#### Rust
171+
172+
```rust
173+
impl Solution {
174+
pub fn minimum_sum(n: i32, k: i32) -> i32 {
175+
let (mut s, mut i) = (0, 1);
176+
let mut vis = std::collections::HashSet::new();
177+
178+
for _ in 0..n {
179+
while vis.contains(&i) {
180+
i += 1;
181+
}
182+
vis.insert(k - i);
183+
s += i;
184+
i += 1;
185+
}
186+
187+
s
188+
}
189+
}
190+
```
191+
173192
<!-- tabs:end -->
174193

175194
<!-- solution:end -->

‎solution/2800-2899/2829.Determine the Minimum Sum of a k-avoiding Array/README_EN.md‎

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ It can be proven that there is no k-avoiding array with a sum less than 3.
5959

6060
### Solution 1: Greedy + Simulation
6161

62-
We start from the positive integer $i=1,ドル and judge whether $i$ can be added to the array in turn. If it can be added, we add $i$ to the array, accumulate it to the answer, and then mark $k-i$ as visited, indicating that $k-i$ cannot be added to the array. The loop continues until the length of the array is $n$.
62+
Starting from the positive integer $i = 1,ドル we sequentially determine if $i$ can be added to the array. If it can be added, we add $i$ to the array, accumulate it to the answer, and then mark $k - i$ as visited, indicating that $k-i$ cannot be added to the array. We continue this process until the array's length reaches $n$.
6363

64-
The time complexity is $O(n^2),ドル and the space complexity is $O(n^2)$. Here, $n$ is the length of the array.
64+
The time complexity is $O(n + k),ドル and the space complexity is $O(n + k)$. Where $n$ is the length of the array.
6565

6666
<!-- tabs:start -->
6767

@@ -75,9 +75,9 @@ class Solution:
7575
for _ in range(n):
7676
while i in vis:
7777
i += 1
78-
vis.add(i)
7978
vis.add(k - i)
8079
s += i
80+
i += 1
8181
return s
8282
```
8383

@@ -87,16 +87,15 @@ class Solution:
8787
class Solution {
8888
public int minimumSum(int n, int k) {
8989
int s = 0, i = 1;
90-
boolean[] vis = new boolean[k + n * n + 1];
90+
boolean[] vis = new boolean[n + k + 1];
9191
while (n-- > 0) {
9292
while (vis[i]) {
9393
++i;
9494
}
95-
vis[i] = true;
9695
if (k >= i) {
9796
vis[k - i] = true;
9897
}
99-
s += i;
98+
s += i++;
10099
}
101100
return s;
102101
}
@@ -110,17 +109,16 @@ class Solution {
110109
public:
111110
int minimumSum(int n, int k) {
112111
int s = 0, i = 1;
113-
bool vis[k + n * n + 1];
112+
bool vis[n + k + 1];
114113
memset(vis, false, sizeof(vis));
115114
while (n--) {
116115
while (vis[i]) {
117116
++i;
118117
}
119-
vis[i] = true;
120118
if (k >= i) {
121119
vis[k - i] = true;
122120
}
123-
s += i;
121+
s += i++;
124122
}
125123
return s;
126124
}
@@ -132,16 +130,16 @@ public:
132130
```go
133131
func minimumSum(n int, k int) int {
134132
s, i := 0, 1
135-
vis := make([]bool, k+n*n+1)
133+
vis := make([]bool, n+k+1)
136134
for ; n > 0; n-- {
137135
for vis[i] {
138136
i++
139137
}
140-
vis[i] = true
141138
if k >= i {
142139
vis[k-i] = true
143140
}
144141
s += i
142+
i++
145143
}
146144
return s
147145
}
@@ -153,21 +151,42 @@ func minimumSum(n int, k int) int {
153151
function minimumSum(n: number, k: number): number {
154152
let s = 0;
155153
let i = 1;
156-
const vis: boolean[] = Array(n *n+ k + 1);
154+
const vis: boolean[] = Array(n + k + 1).fill(false);
157155
while (n--) {
158156
while (vis[i]) {
159157
++i;
160158
}
161-
vis[i] = true;
162159
if (k >= i) {
163160
vis[k - i] = true;
164161
}
165-
s += i;
162+
s += i++;
166163
}
167164
return s;
168165
}
169166
```
170167

168+
#### Rust
169+
170+
```rust
171+
impl Solution {
172+
pub fn minimum_sum(n: i32, k: i32) -> i32 {
173+
let (mut s, mut i) = (0, 1);
174+
let mut vis = std::collections::HashSet::new();
175+
176+
for _ in 0..n {
177+
while vis.contains(&i) {
178+
i += 1;
179+
}
180+
vis.insert(k - i);
181+
s += i;
182+
i += 1;
183+
}
184+
185+
s
186+
}
187+
}
188+
```
189+
171190
<!-- tabs:end -->
172191

173192
<!-- solution:end -->

‎solution/2800-2899/2829.Determine the Minimum Sum of a k-avoiding Array/Solution.cpp‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@ class Solution {
22
public:
33
int minimumSum(int n, int k) {
44
int s = 0, i = 1;
5-
bool vis[k + n * n + 1];
5+
bool vis[n + k + 1];
66
memset(vis, false, sizeof(vis));
77
while (n--) {
88
while (vis[i]) {
99
++i;
1010
}
11-
vis[i] = true;
1211
if (k >= i) {
1312
vis[k - i] = true;
1413
}
15-
s += i;
14+
s += i++;
1615
}
1716
return s;
1817
}
19-
};
18+
};
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
func minimumSum(n int, k int) int {
22
s, i := 0, 1
3-
vis := make([]bool, k+n*n+1)
3+
vis := make([]bool, n+k+1)
44
for ; n > 0; n-- {
55
for vis[i] {
66
i++
77
}
8-
vis[i] = true
98
if k >= i {
109
vis[k-i] = true
1110
}
1211
s += i
12+
i++
1313
}
1414
return s
15-
}
15+
}
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
class Solution {
22
public int minimumSum(int n, int k) {
33
int s = 0, i = 1;
4-
boolean[] vis = new boolean[k + n * n + 1];
4+
boolean[] vis = new boolean[n + k + 1];
55
while (n-- > 0) {
66
while (vis[i]) {
77
++i;
88
}
9-
vis[i] = true;
109
if (k >= i) {
1110
vis[k - i] = true;
1211
}
13-
s += i;
12+
s += i++;
1413
}
1514
return s;
1615
}
17-
}
16+
}

‎solution/2800-2899/2829.Determine the Minimum Sum of a k-avoiding Array/Solution.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def minimumSum(self, n: int, k: int) -> int:
55
for _ in range(n):
66
while i in vis:
77
i += 1
8-
vis.add(i)
98
vis.add(k - i)
109
s += i
10+
i += 1
1111
return s
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
impl Solution {
2+
pub fn minimum_sum(n: i32, k: i32) -> i32 {
3+
let (mut s, mut i) = (0, 1);
4+
let mut vis = std::collections::HashSet::new();
5+
6+
for _ in 0..n {
7+
while vis.contains(&i) {
8+
i += 1;
9+
}
10+
vis.insert(k - i);
11+
s += i;
12+
i += 1;
13+
}
14+
15+
s
16+
}
17+
}
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
function minimumSum(n: number, k: number): number {
22
let s = 0;
33
let i = 1;
4-
const vis: boolean[] = Array(n *n+ k + 1);
4+
const vis: boolean[] = Array(n + k + 1).fill(false);
55
while (n--) {
66
while (vis[i]) {
77
++i;
88
}
9-
vis[i] = true;
109
if (k >= i) {
1110
vis[k - i] = true;
1211
}
13-
s += i;
12+
s += i++;
1413
}
1514
return s;
1615
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /