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 07e0016

Browse files
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
2 parents 59825d6 + 1923084 commit 07e0016

25 files changed

+555
-40
lines changed

‎problems/0001.两数之和.md‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -263,13 +263,15 @@ php
263263
```php
264264
function twoSum(array $nums, int $target): array
265265
{
266-
for ($i = 0; $i < count($nums);$i++) {
267-
// 计算剩下的数
268-
$residue = $target - $nums[$i];
269-
// 匹配的index,有则返回index, 无则返回false
270-
$match_index = array_search($residue, $nums);
271-
if ($match_index !== false && $match_index != $i) {
272-
return array($i, $match_index);
266+
$map = [];
267+
foreach($nums as $i => $num) {
268+
if (isset($map[$target - $num])) {
269+
return [
270+
$i,
271+
$map[$target - $num]
272+
];
273+
} else {
274+
$map[$num] = $i;
273275
}
274276
}
275277
return [];

‎problems/0015.三数之和.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,9 @@ function threeSum(nums: number[]): number[][] {
493493
right: number = length - 1;
494494
let resArr: number[][] = [];
495495
for (let i = 0; i < length; i++) {
496+
if (nums[i]>0) {
497+
return resArr; //nums经过排序后,只要nums[i]>0, 此后的nums[i] + nums[left] + nums[right]均大于0,可以提前终止循环。
498+
}
496499
if (i > 0 && nums[i] === nums[i - 1]) {
497500
continue;
498501
}

‎problems/0019.删除链表的倒数第N个节点.md‎

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -191,18 +191,20 @@ TypeScript:
191191
```typescript
192192
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
193193
let newHead: ListNode | null = new ListNode(0, head);
194-
let slowNode: ListNode | null = newHead,
195-
fastNode: ListNode | null = newHead;
196-
for (let i = 0; i < n; i++) {
197-
fastNode = fastNode.next;
194+
//根据leetcode题目的定义可推断这里快慢指针均不需要定义为ListNode | null。
195+
let slowNode: ListNode = newHead;
196+
let fastNode: ListNode = newHead;
197+
198+
while(n--) {
199+
fastNode = fastNode.next!; //由虚拟头节点前进n个节点时,fastNode.next可推断不为null。
198200
}
199-
while(fastNode.next) {
201+
while(fastNode.next) {//遍历直至fastNode.next = null, 即尾部节点。 此时slowNode指向倒数第n个节点。
200202
fastNode = fastNode.next;
201-
slowNode = slowNode.next;
203+
slowNode = slowNode.next!;
202204
}
203-
slowNode.next = slowNode.next.next;
204-
return newHead.next;
205-
};
205+
slowNode.next = slowNode.next!.next;//倒数第n个节点可推断其next节点不为空。
206+
return newHead.next;
207+
}
206208
```
207209

208210
版本二(计算节点总数法):

‎problems/0024.两两交换链表中的节点.md‎

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,5 +337,48 @@ object Solution {
337337
}
338338
```
339339

340+
PHP:
341+
```php
342+
//虚拟头结点
343+
function swapPairs($head) {
344+
if ($head == null || $head->next == null) {
345+
return $head;
346+
}
347+
348+
$dummyNode = new ListNode(0, $head);
349+
$preNode = $dummyNode; //虚拟头结点
350+
$curNode = $head;
351+
$nextNode = $head->next;
352+
while($curNode && $nextNode) {
353+
$nextNextNode = $nextNode->next; //存下一个节点
354+
$nextNode->next = $curNode; //交换curHead 和 nextHead
355+
$curNode->next = $nextNextNode;
356+
$preNode->next = $nextNode; //上一个节点的下一个指向指向nextHead
357+
358+
//更新当前的几个指针
359+
$preNode = $preNode->next->next;
360+
$curNode = $nextNextNode;
361+
$nextNode = $nextNextNode->next;
362+
}
363+
364+
return $dummyNode->next;
365+
}
366+
367+
//递归版本
368+
function swapPairs($head)
369+
{
370+
// 终止条件
371+
if ($head === null || $head->next === null) {
372+
return $head;
373+
}
374+
375+
//结果要返回的头结点
376+
$next = $head->next;
377+
$head->next = $this->swapPairs($next->next); //当前头结点->next指向更新
378+
$next->next = $head; //当前第二个节点的->next指向更新
379+
return $next; //返回翻转后的头结点
380+
}
381+
```
382+
340383
-----------------------
341384
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

‎problems/0056.合并区间.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,5 +329,31 @@ object Solution {
329329
}
330330
```
331331

332+
### Rust
333+
334+
```Rust
335+
impl Solution {
336+
fn max(a: i32, b: i32) -> i32 {
337+
if a > b { a } else { b }
338+
}
339+
340+
pub fn merge(intervals: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
341+
let mut intervals = intervals;
342+
let mut result = Vec::new();
343+
if intervals.len() == 0 { return result; }
344+
intervals.sort_by(|a, b| a[0].cmp(&b[0]));
345+
result.push(intervals[0].clone());
346+
for i in 1..intervals.len() {
347+
if result.last_mut().unwrap()[1] >= intervals[i][0] {
348+
result.last_mut().unwrap()[1] = Self::max(result.last_mut().unwrap()[1], intervals[i][1]);
349+
} else {
350+
result.push(intervals[i].clone());
351+
}
352+
}
353+
result
354+
}
355+
}
356+
```
357+
332358
-----------------------
333359
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

‎problems/0077.组合.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ vector<vector<int>> result; // 存放符合条件结果的集合
114114
vector<int> path; // 用来存放符合条件结果
115115
```
116116

117-
其实不定义这两个全局遍历也是可以的,把这两个变量放进递归函数的参数里,但函数里参数太多影响可读性,所以我定义全局变量了。
117+
其实不定义这两个全局变量也是可以的,把这两个变量放进递归函数的参数里,但函数里参数太多影响可读性,所以我定义全局变量了。
118118

119119
函数里一定有两个参数,既然是集合n里面取k的数,那么n和k是两个int型的参数。
120120

‎problems/0096.不同的二叉搜索树.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,24 @@ function numTrees(n: number): number {
252252
};
253253
```
254254

255+
### Rust
256+
257+
```Rust
258+
impl Solution {
259+
pub fn num_trees(n: i32) -> i32 {
260+
let n = n as usize;
261+
let mut dp = vec![0; n + 1];
262+
dp[0] = 1;
263+
for i in 1..=n {
264+
for j in 1..=i {
265+
dp[i] += dp[j - 1] * dp[i - j];
266+
}
267+
}
268+
dp[n]
269+
}
270+
}
271+
```
272+
255273
### C
256274

257275
```c

‎problems/0100.相同的树.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,20 @@ Go:
240240

241241
JavaScript:
242242

243+
> 递归法
244+
245+
```javascript
246+
var isSameTree = function (p, q) {
247+
if (p == null && q == null)
248+
return true;
249+
if (p == null || q == null)
250+
return false;
251+
if (p.val != q.val)
252+
return false;
253+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
254+
};
255+
```
256+
243257
TypeScript:
244258

245259
> 递归法-先序遍历

‎problems/0134.加油站.md‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,55 @@ function canCompleteCircuit(gas: number[], cost: number[]): number {
405405
};
406406
```
407407

408+
### Rust
409+
410+
贪心算法:方法一
411+
412+
```Rust
413+
impl Solution {
414+
pub fn can_complete_circuit(gas: Vec<i32>, cost: Vec<i32>) -> i32 {
415+
let mut cur_sum = 0;
416+
let mut min = i32::MAX;
417+
for i in 0..gas.len() {
418+
let rest = gas[i] - cost[i];
419+
cur_sum += rest;
420+
if cur_sum < min { min = cur_sum; }
421+
}
422+
if cur_sum < 0 { return -1; }
423+
if min > 0 { return 0; }
424+
for i in (0..gas.len()).rev() {
425+
let rest = gas[i] - cost[i];
426+
min += rest;
427+
if min >= 0 { return i as i32; }
428+
}
429+
-1
430+
}
431+
}
432+
```
433+
434+
贪心算法:方法二
435+
436+
```Rust
437+
impl Solution {
438+
pub fn can_complete_circuit(gas: Vec<i32>, cost: Vec<i32>) -> i32 {
439+
let mut cur_sum = 0;
440+
let mut total_sum = 0;
441+
let mut start = 0;
442+
for i in 0..gas.len() {
443+
cur_sum += gas[i] - cost[i];
444+
total_sum += gas[i] - cost[i];
445+
if cur_sum < 0 {
446+
start = i + 1;
447+
cur_sum = 0;
448+
}
449+
}
450+
if total_sum < 0 { return -1; }
451+
start as i32
452+
}
453+
}
454+
```
455+
456+
408457
### C
409458

410459
贪心算法:方法一

‎problems/0203.移除链表元素.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,8 @@ function removeElements(head: ListNode | null, val: number): ListNode | null {
385385
if (cur.val === val) {
386386
pre.next = cur.next;
387387
} else {
388-
pre = pre.next;
388+
//此处不加类型断言时:编译器会认为pre类型为ListNode, pre.next类型为ListNode | null
389+
pre = pre.next as ListNode;
389390
}
390391
cur = cur.next;
391392
}

0 commit comments

Comments
(0)

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