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 e697b6c

Browse files
committed
feat: add solutions to lc problems: No.0367,0844,1385
- No.0367.Valid Perfect Square - No.0844.Backspace String Compare - No.1385.Find the Distance Value Between Two Arrays
1 parent 2f01e7b commit e697b6c

File tree

12 files changed

+592
-36
lines changed

12 files changed

+592
-36
lines changed

‎solution/0300-0399/0367.Valid Perfect Square/README.md‎

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@
4040

4141
**方法一:二分查找**
4242

43-
不断循环二分枚举数字,判断该数的平方与 num 的大小关系,进而缩短空间,继续循环直至 `left < right` 不成立。循环结束判断 left2 与 num 是否相等。
43+
不断循环二分枚举数字,判断该数的平方与 $num$ 的大小关系,进而缩短空间,继续循环直至 `left < right` 不成立。循环结束判断 $left^2$$num$ 是否相等。
4444

45-
时间复杂度 O(logn)
45+
时间复杂度:$O(logN)$
4646

4747
**方法二:转换为数学问题**
4848

49-
由于 `n2 = 1 + 3 + 5 + ... + (2n-1)`,对数字 num 不断减去 i (`i = 1, 3, 5, ...`) 直至 num 不大于 0,如果最终 num 等于 0,说明是一个有效的完全平方数。
49+
由于 `n2 = 1 + 3 + 5 + ... + (2n-1)`,对数字 $num$ 不断减去 i (`i = 1, 3, 5, ...`) 直至 $num$ 不大于 0,如果最终 $num$ 等于 0,说明是一个有效的完全平方数。
5050

51-
时间复杂度O(sqrt(n))
51+
时间复杂度:$O(sqrt(N))$
5252

5353
<!-- tabs:start -->
5454

@@ -165,25 +165,53 @@ func isPerfectSquare(num int) bool {
165165
}
166166
```
167167

168+
### **TypeScript**
169+
170+
```ts
171+
function isPerfectSquare(num: number): boolean {
172+
let left = 1;
173+
let right = num >> 1;
174+
while (left < right) {
175+
const mid = (left + right) >>> 1;
176+
if (mid * mid < num) {
177+
left = mid + 1;
178+
} else {
179+
right = mid;
180+
}
181+
}
182+
return left * left === num;
183+
}
184+
```
185+
186+
```ts
187+
function isPerfectSquare(num: number): boolean {
188+
let i = 1;
189+
while (num > 0) {
190+
num -= i;
191+
i += 2;
192+
}
193+
return num === 0;
194+
}
195+
```
196+
168197
### **Rust**
169198

170199
```rust
171200
use std::cmp::Ordering;
172-
173201
impl Solution {
174-
pub fn is_perfect_square(mutnum: i32) -> bool {
202+
pub fn is_perfect_square(num: i32) -> bool {
175203
let num: i64 = num as i64;
176-
let mut l = 0;
177-
let mut r = num;
178-
while l < r {
179-
let mid = l + (r - l) / 2;
204+
let mut left = 1;
205+
let mut right = num>>1;
206+
while left < right {
207+
let mid = left + (right - left) / 2;
180208
match (mid * mid).cmp(&num) {
181-
Ordering::Less => l = mid + 1,
182-
Ordering::Greater => r = mid - 1,
209+
Ordering::Less => left = mid + 1,
210+
Ordering::Greater => right = mid - 1,
183211
Ordering::Equal => return true,
184212
}
185213
}
186-
r * r == num
214+
left * left == num
187215
}
188216
}
189217
```

‎solution/0300-0399/0367.Valid Perfect Square/README_EN.md‎

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -153,25 +153,53 @@ func isPerfectSquare(num int) bool {
153153
}
154154
```
155155

156+
### **TypeScript**
157+
158+
```ts
159+
function isPerfectSquare(num: number): boolean {
160+
let left = 1;
161+
let right = num >> 1;
162+
while (left < right) {
163+
const mid = (left + right) >>> 1;
164+
if (mid * mid < num) {
165+
left = mid + 1;
166+
} else {
167+
right = mid;
168+
}
169+
}
170+
return left * left === num;
171+
}
172+
```
173+
174+
```ts
175+
function isPerfectSquare(num: number): boolean {
176+
let i = 1;
177+
while (num > 0) {
178+
num -= i;
179+
i += 2;
180+
}
181+
return num === 0;
182+
}
183+
```
184+
156185
### **Rust**
157186

158187
```rust
159188
use std::cmp::Ordering;
160-
161189
impl Solution {
162-
pub fn is_perfect_square(mutnum: i32) -> bool {
190+
pub fn is_perfect_square(num: i32) -> bool {
163191
let num: i64 = num as i64;
164-
let mut l = 0;
165-
let mut r = num;
166-
while l < r {
167-
let mid = l + (r - l) / 2;
192+
let mut left = 1;
193+
let mut right = num>>1;
194+
while left < right {
195+
let mid = left + (right - left) / 2;
168196
match (mid * mid).cmp(&num) {
169-
Ordering::Less => l = mid + 1,
170-
Ordering::Greater => r = mid - 1,
197+
Ordering::Less => left = mid + 1,
198+
Ordering::Greater => right = mid - 1,
171199
Ordering::Equal => return true,
172200
}
173201
}
174-
r * r == num
202+
left * left == num
175203
}
176204
}
177205
```
Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
use std::cmp::Ordering;
2-
32
impl Solution {
4-
pub fn is_perfect_square(mutnum: i32) -> bool {
3+
pub fn is_perfect_square(num: i32) -> bool {
54
let num: i64 = num as i64;
6-
let mut l = 0;
7-
let mut r = num;
8-
while l < r {
9-
let mid = l + (r - l) / 2;
5+
let mut left = 1;
6+
let mut right = num >> 1;
7+
while left < right {
8+
let mid = left + (right - left) / 2;
109
match (mid * mid).cmp(&num) {
11-
Ordering::Less => l = mid + 1,
12-
Ordering::Greater => r = mid - 1,
10+
Ordering::Less => left = mid + 1,
11+
Ordering::Greater => right = mid - 1,
1312
Ordering::Equal => return true,
1413
}
1514
}
16-
r * r == num
15+
left * left == num
1716
}
1817
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function isPerfectSquare(num: number): boolean {
2+
let left = 1;
3+
let right = num >> 1;
4+
while (left < right) {
5+
const mid = (left + right) >>> 1;
6+
if (mid * mid < num) {
7+
left = mid + 1;
8+
} else {
9+
right = mid;
10+
}
11+
}
12+
return left * left === num;
13+
}

‎solution/0800-0899/0844.Backspace String Compare/README.md‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,92 @@ func backspaceCompare(s string, t string) bool {
233233
}
234234
```
235235

236+
### **TypeScript**
237+
238+
```ts
239+
function backspaceCompare(s: string, t: string): boolean {
240+
let i = s.length - 1;
241+
let j = t.length - 1;
242+
while (i >= 0 || j >= 0) {
243+
let skip = 0;
244+
while (i >= 0) {
245+
if (s[i] === '#') {
246+
skip++;
247+
} else if (skip !== 0) {
248+
skip--;
249+
} else {
250+
break;
251+
}
252+
i--;
253+
}
254+
skip = 0;
255+
while (j >= 0) {
256+
if (t[j] === '#') {
257+
skip++;
258+
} else if (skip !== 0) {
259+
skip--;
260+
} else {
261+
break;
262+
}
263+
j--;
264+
}
265+
if (s[i] !== t[j]) {
266+
return false;
267+
}
268+
i--;
269+
j--;
270+
}
271+
return true;
272+
}
273+
```
274+
275+
### **Rust**
276+
277+
```rust
278+
impl Solution {
279+
pub fn backspace_compare(s: String, t: String) -> bool {
280+
let (s, t) = (s.as_bytes(), t.as_bytes());
281+
let (mut i, mut j) = (s.len(), t.len());
282+
while i != 0 || j != 0 {
283+
let mut skip = 0;
284+
while i != 0 {
285+
if s[i - 1] == b'#' {
286+
skip += 1;
287+
} else if skip != 0 {
288+
skip -= 1;
289+
} else {
290+
break;
291+
}
292+
i -= 1
293+
}
294+
skip = 0;
295+
while j != 0 {
296+
if t[j - 1] == b'#' {
297+
skip += 1;
298+
} else if skip != 0 {
299+
skip -= 1;
300+
} else {
301+
break;
302+
}
303+
j -= 1
304+
}
305+
if i == 0 && j == 0 {
306+
break;
307+
}
308+
if i == 0 || j == 0 {
309+
return false;
310+
}
311+
if s[i - 1] != t[j - 1] {
312+
return false;
313+
}
314+
i -= 1;
315+
j -= 1;
316+
}
317+
true
318+
}
319+
}
320+
```
321+
236322
### **...**
237323

238324
```

‎solution/0800-0899/0844.Backspace String Compare/README_EN.md‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,92 @@ func backspaceCompare(s string, t string) bool {
215215
}
216216
```
217217

218+
### **TypeScript**
219+
220+
```ts
221+
function backspaceCompare(s: string, t: string): boolean {
222+
let i = s.length - 1;
223+
let j = t.length - 1;
224+
while (i >= 0 || j >= 0) {
225+
let skip = 0;
226+
while (i >= 0) {
227+
if (s[i] === '#') {
228+
skip++;
229+
} else if (skip !== 0) {
230+
skip--;
231+
} else {
232+
break;
233+
}
234+
i--;
235+
}
236+
skip = 0;
237+
while (j >= 0) {
238+
if (t[j] === '#') {
239+
skip++;
240+
} else if (skip !== 0) {
241+
skip--;
242+
} else {
243+
break;
244+
}
245+
j--;
246+
}
247+
if (s[i] !== t[j]) {
248+
return false;
249+
}
250+
i--;
251+
j--;
252+
}
253+
return true;
254+
}
255+
```
256+
257+
### **Rust**
258+
259+
```rust
260+
impl Solution {
261+
pub fn backspace_compare(s: String, t: String) -> bool {
262+
let (s, t) = (s.as_bytes(), t.as_bytes());
263+
let (mut i, mut j) = (s.len(), t.len());
264+
while i != 0 || j != 0 {
265+
let mut skip = 0;
266+
while i != 0 {
267+
if s[i - 1] == b'#' {
268+
skip += 1;
269+
} else if skip != 0 {
270+
skip -= 1;
271+
} else {
272+
break;
273+
}
274+
i -= 1
275+
}
276+
skip = 0;
277+
while j != 0 {
278+
if t[j - 1] == b'#' {
279+
skip += 1;
280+
} else if skip != 0 {
281+
skip -= 1;
282+
} else {
283+
break;
284+
}
285+
j -= 1
286+
}
287+
if i == 0 && j == 0 {
288+
break;
289+
}
290+
if i == 0 || j == 0 {
291+
return false;
292+
}
293+
if s[i - 1] != t[j - 1] {
294+
return false;
295+
}
296+
i -= 1;
297+
j -= 1;
298+
}
299+
true
300+
}
301+
}
302+
```
303+
218304
### **...**
219305

220306
```

0 commit comments

Comments
(0)

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