Skip to content

Commit 7323938

Browse files
committed
feat: add solutions to lc problem: No.1860
No.1860.Incremental Memory Leak
1 parent 9871e52 commit 7323938

File tree

8 files changed

+110
-21
lines changed

8 files changed

+110
-21
lines changed

solution/1800-1899/1860.Incremental Memory Leak/README.md

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@
4949

5050
<!-- 这里可写通用的实现逻辑 -->
5151

52+
**方法一:模拟**
53+
54+
直接模拟内存的分配。
55+
56+
假设 $t$ 为意外退出的时刻,那么两个内存条一定可以容纳 $t-1$ 时刻及以前消耗的内存,因此有:
57+
58+
$$
59+
\sum_{i=1}^{t-1} i = \frac{t\times (t-1)}{2} \leq (m_1+m_2)
60+
$$
61+
62+
时间复杂度 $O(\sqrt{m1+m2})$,其中 $m_1$, $m_2$ 分别为两个内存条的内存大小。
63+
5264
<!-- tabs:start -->
5365

5466
### **Python3**
@@ -59,7 +71,7 @@
5971
class Solution:
6072
def memLeak(self, memory1: int, memory2: int) -> List[int]:
6173
i = 1
62-
while memory1 >= i or memory2 >= i:
74+
while i <= max(memory1, memory2):
6375
if memory1 >= memory2:
6476
memory1 -= i
6577
else:
@@ -76,13 +88,12 @@ class Solution:
7688
class Solution {
7789
public int[] memLeak(int memory1, int memory2) {
7890
int i = 1;
79-
while (memory1 >= i || memory2 >= i) {
91+
for (; i <= Math.max(memory1, memory2); ++i) {
8092
if (memory1 >= memory2) {
8193
memory1 -= i;
8294
} else {
8395
memory2 -= i;
8496
}
85-
++i;
8697
}
8798
return new int[] {i, memory1, memory2};
8899
}
@@ -99,13 +110,12 @@ class Solution {
99110
*/
100111
var memLeak = function (memory1, memory2) {
101112
let i = 1;
102-
while (memory1 >= i || memory2 >= i) {
113+
for (; i <= Math.max(memory1, memory2); ++i) {
103114
if (memory1 >= memory2) {
104115
memory1 -= i;
105116
} else {
106117
memory2 -= i;
107118
}
108-
i++;
109119
}
110120
return [i, memory1, memory2];
111121
};
@@ -118,19 +128,50 @@ class Solution {
118128
public:
119129
vector<int> memLeak(int memory1, int memory2) {
120130
int i = 1;
121-
while (memory1 >= i || memory2 >= i) {
131+
for (; i <= max(memory1, memory2); ++i) {
122132
if (memory1 >= memory2) {
123133
memory1 -= i;
124134
} else {
125135
memory2 -= i;
126136
}
127-
++i;
128137
}
129138
return {i, memory1, memory2};
130139
}
131140
};
132141
```
133142
143+
### **Go**
144+
145+
```go
146+
func memLeak(memory1 int, memory2 int) []int {
147+
i := 1
148+
for ; i <= memory1 || i <= memory2; i++ {
149+
if memory1 >= memory2 {
150+
memory1 -= i
151+
} else {
152+
memory2 -= i
153+
}
154+
}
155+
return []int{i, memory1, memory2}
156+
}
157+
```
158+
159+
### **TypeScript**
160+
161+
```ts
162+
function memLeak(memory1: number, memory2: number): number[] {
163+
let i = 1;
164+
for (; i <= Math.max(memory1, memory2); ++i) {
165+
if (memory1 >= memory2) {
166+
memory1 -= i;
167+
} else {
168+
memory2 -= i;
169+
}
170+
}
171+
return [i, memory1, memory2];
172+
}
173+
```
174+
134175
### **...**
135176

136177
```

solution/1800-1899/1860.Incremental Memory Leak/README_EN.md

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
class Solution:
5454
def memLeak(self, memory1: int, memory2: int) -> List[int]:
5555
i = 1
56-
while memory1 >= i or memory2 >= i:
56+
while i <= max(memory1, memory2):
5757
if memory1 >= memory2:
5858
memory1 -= i
5959
else:
@@ -68,13 +68,12 @@ class Solution:
6868
class Solution {
6969
public int[] memLeak(int memory1, int memory2) {
7070
int i = 1;
71-
while (memory1 >= i || memory2 >= i) {
71+
for (; i <= Math.max(memory1, memory2); ++i) {
7272
if (memory1 >= memory2) {
7373
memory1 -= i;
7474
} else {
7575
memory2 -= i;
7676
}
77-
++i;
7877
}
7978
return new int[] {i, memory1, memory2};
8079
}
@@ -91,13 +90,12 @@ class Solution {
9190
*/
9291
var memLeak = function (memory1, memory2) {
9392
let i = 1;
94-
while (memory1 >= i || memory2 >= i) {
93+
for (; i <= Math.max(memory1, memory2); ++i) {
9594
if (memory1 >= memory2) {
9695
memory1 -= i;
9796
} else {
9897
memory2 -= i;
9998
}
100-
i++;
10199
}
102100
return [i, memory1, memory2];
103101
};
@@ -110,19 +108,50 @@ class Solution {
110108
public:
111109
vector<int> memLeak(int memory1, int memory2) {
112110
int i = 1;
113-
while (memory1 >= i || memory2 >= i) {
111+
for (; i <= max(memory1, memory2); ++i) {
114112
if (memory1 >= memory2) {
115113
memory1 -= i;
116114
} else {
117115
memory2 -= i;
118116
}
119-
++i;
120117
}
121118
return {i, memory1, memory2};
122119
}
123120
};
124121
```
125122
123+
### **Go**
124+
125+
```go
126+
func memLeak(memory1 int, memory2 int) []int {
127+
i := 1
128+
for ; i <= memory1 || i <= memory2; i++ {
129+
if memory1 >= memory2 {
130+
memory1 -= i
131+
} else {
132+
memory2 -= i
133+
}
134+
}
135+
return []int{i, memory1, memory2}
136+
}
137+
```
138+
139+
### **TypeScript**
140+
141+
```ts
142+
function memLeak(memory1: number, memory2: number): number[] {
143+
let i = 1;
144+
for (; i <= Math.max(memory1, memory2); ++i) {
145+
if (memory1 >= memory2) {
146+
memory1 -= i;
147+
} else {
148+
memory2 -= i;
149+
}
150+
}
151+
return [i, memory1, memory2];
152+
}
153+
```
154+
126155
### **...**
127156

128157
```

solution/1800-1899/1860.Incremental Memory Leak/Solution.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ class Solution {
22
public:
33
vector<int> memLeak(int memory1, int memory2) {
44
int i = 1;
5-
while (memory1 >= i || memory2 >= i) {
5+
for (; i <= max(memory1, memory2); ++i) {
66
if (memory1 >= memory2) {
77
memory1 -= i;
88
} else {
99
memory2 -= i;
1010
}
11-
++i;
1211
}
1312
return {i, memory1, memory2};
1413
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func memLeak(memory1 int, memory2 int) []int {
2+
i := 1
3+
for ; i <= memory1 || i <= memory2; i++ {
4+
if memory1 >= memory2 {
5+
memory1 -= i
6+
} else {
7+
memory2 -= i
8+
}
9+
}
10+
return []int{i, memory1, memory2}
11+
}

solution/1800-1899/1860.Incremental Memory Leak/Solution.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
class Solution {
22
public int[] memLeak(int memory1, int memory2) {
33
int i = 1;
4-
while (memory1 >= i || memory2 >= i) {
4+
for (; i <= Math.max(memory1, memory2); ++i) {
55
if (memory1 >= memory2) {
66
memory1 -= i;
77
} else {
88
memory2 -= i;
99
}
10-
++i;
1110
}
1211
return new int[] {i, memory1, memory2};
1312
}

solution/1800-1899/1860.Incremental Memory Leak/Solution.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
*/
66
var memLeak = function (memory1, memory2) {
77
let i = 1;
8-
while (memory1 >= i || memory2 >= i) {
8+
for (; i <= Math.max(memory1, memory2); ++i) {
99
if (memory1 >= memory2) {
1010
memory1 -= i;
1111
} else {
1212
memory2 -= i;
1313
}
14-
i++;
1514
}
1615
return [i, memory1, memory2];
1716
};

solution/1800-1899/1860.Incremental Memory Leak/Solution.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Solution:
22
def memLeak(self, memory1: int, memory2: int) -> List[int]:
33
i = 1
4-
while memory1 >= i or memory2 >= i:
4+
while i <= max(memory1, memory2):
55
if memory1 >= memory2:
66
memory1 -= i
77
else:
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function memLeak(memory1: number, memory2: number): number[] {
2+
let i = 1;
3+
for (; i <= Math.max(memory1, memory2); ++i) {
4+
if (memory1 >= memory2) {
5+
memory1 -= i;
6+
} else {
7+
memory2 -= i;
8+
}
9+
}
10+
return [i, memory1, memory2];
11+
}

0 commit comments

Comments
 (0)