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 0dbdf11

Browse files
committed
docs: add No3、27、35题解
1 parent a22375b commit 0dbdf11

File tree

4 files changed

+185
-0
lines changed

4 files changed

+185
-0
lines changed

‎leetcode刷题/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# LootCode 刷题
22

33
- [No.1 两数之和](note/No1_two-sum.md)
4+
- [No.3 无重复字符的最长子串](note/No3_length-of-longest-substring.md)
45
- [No.7 整数反转](note/No7_reverse.md)
56
- [No.8 字符串转换整数 (atoi)](note/No8_my-atoi.md)
67
- [No.13 罗马数字转整数](note/No13_roman-to-int.md)
@@ -9,6 +10,8 @@
910
- [No.20 有效的括号](note/No20_is-valid.md)
1011
- [No.21 合并两个有序链表](note/No21_merge-two-lists.md)
1112
- [No.26 从排序数组中删除重复项](note/No26_remove-duplicates.md)
13+
- [No.27 移除元素](note/No27-removeElement.md)
14+
- [No.35 搜索插入位置](note/No35_search-insert.md)
1215
- [No.36 有效的数独](note/No36_isvalid-sudoku.md)
1316
- [No.38 报数](note/No38_count-and-say.md)
1417
- [No.48 旋转图像](note/No48_rotate.md)
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# No.27 移除元素
2+
3+
难度:`easy`
4+
5+
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
6+
7+
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
8+
9+
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
10+
11+
## 示例
12+
13+
示例 1:
14+
```
15+
给定 nums = [3,2,2,3], val = 3,
16+
17+
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。
18+
19+
你不需要考虑数组中超出新长度后面的元素。
20+
```
21+
22+
示例 2:
23+
```
24+
给定 nums = [0,1,2,2,3,0,4,2], val = 2,
25+
26+
函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
27+
28+
注意这五个元素可为任意顺序。
29+
30+
你不需要考虑数组中超出新长度后面的元素。
31+
```
32+
33+
## 解题思路
34+
35+
循环数组,如果值相等,则与数组末尾的数进行交换,同时长度减1。
36+
37+
38+
代码如下:
39+
40+
```javascript
41+
/**
42+
* @param {number[]} nums
43+
* @param {number} val
44+
* @return {number}
45+
*/
46+
var removeElement = function(nums, val) {
47+
let ans = nums.length;
48+
for (let i = 0; i < ans;) {
49+
if (nums[i] == val) {
50+
nums[i] = nums[ans - 1];
51+
ans--;
52+
} else {
53+
i++;
54+
}
55+
}
56+
return ans;
57+
};
58+
```
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# No.35 搜索插入位置
2+
3+
难度:`easy`
4+
5+
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
6+
7+
你可以假设数组中无重复元素。
8+
9+
## 示例
10+
11+
示例 1:
12+
13+
```
14+
输入: [1,3,5,6], 5
15+
输出: 2
16+
```
17+
示例 2:
18+
```
19+
输入: [1,3,5,6], 2
20+
输出: 1
21+
```
22+
示例 3:
23+
```
24+
输入: [1,3,5,6], 7
25+
输出: 4
26+
```
27+
示例 4:
28+
```
29+
输入: [1,3,5,6], 0
30+
输出: 0
31+
```
32+
33+
## 解题思路
34+
35+
简单的二分法。
36+
37+
代码如下:
38+
39+
```javascript
40+
/**
41+
* @param {number[]} nums
42+
* @param {number} target
43+
* @return {number}
44+
*/
45+
var searchInsert = function(nums, target) {
46+
let index = 0;
47+
let n = nums.length
48+
49+
let left = 0, right = n-1;
50+
// 二分法
51+
while(left <= right) {
52+
let mid = Math.floor((left + right)/2);
53+
if (nums[mid] == target) {
54+
return mid;
55+
} else if (nums[mid] < target) {
56+
// 题目要我们返回大于或者等于目标值的第 1 个数的索引
57+
// 此时 mid 一定不是所求的左边界,
58+
// 此时左边界更新为 mid + 1
59+
left = mid + 1;
60+
} else {
61+
// 既然不会等于,此时 nums[mid] > target
62+
// mid 也一定不是所求的右边界
63+
// 此时右边界更新为 mid - 1
64+
right = mid - 1;
65+
}
66+
}
67+
return left;
68+
};
69+
```
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# No.3 无重复字符的最长子串
2+
3+
难度:`middle`
4+
5+
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
6+
7+
## 示例
8+
9+
示例 1:
10+
```
11+
输入: "abcabcbb"
12+
输出: 3
13+
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
14+
```
15+
示例 2:
16+
```
17+
输入: "bbbbb"
18+
输出: 1
19+
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
20+
```
21+
示例 3:
22+
```
23+
输入: "pwwkew"
24+
输出: 3
25+
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
26+
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
27+
```
28+
29+
## 解题思路
30+
31+
一遍循环,使用滑动窗口的思想,找出最大值即可。
32+
33+
代码如下:
34+
35+
36+
```javascript
37+
/**
38+
* @param {string} s
39+
* @return {number}
40+
*/
41+
var lengthOfLongestSubstring = function(s) {
42+
43+
let n = s.length, ans = 0, start = 0;
44+
let map = new Map();
45+
for (let i = 0; i < n; i++) {
46+
let char = s[i];
47+
if (map.has(char)) {
48+
start = Math.max(map.get(char), start)
49+
}
50+
ans = Math.max(ans, i - start + 1);
51+
map.set(s[i], i + 1);
52+
}
53+
return ans;
54+
};
55+
```

0 commit comments

Comments
(0)

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