Movatterモバイル変換


[0]ホーム

URL:


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

Commitae09862

Browse files
author
lixiang.2533
committed
add new answers
Change-Id: I314f82a79a93a30bad5db6ea16ee11af2ddb2b20
1 parente684fdd commitae09862

File tree

66 files changed

+943
-25242
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+943
-25242
lines changed

‎.DS_Store

0 Bytes
Binary file not shown.

‎.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
./Tmp/*
2+
Tmp

‎merge_md.md

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
```python
22
import os
3-
from globimport glob
3+
from globimport glob
4+
45
dirs= os.listdir('/Users/lixiang.2533/Desktop/Blogs/Leetcode/')
56
dir='/Users/lixiang.2533/Desktop/Blogs/Leetcode'
6-
dirs= ['哈希表','','二分法','数学题','链表','字符串','数组','']
7+
dirs= ['动态规划','','回溯']
78
for ain dirs:
8-
md_list= glob(os.path.join(dir, a,'*.md'))
9+
md_list= glob(os.path.join(dir, a,'*.md'))
910
md_list=sorted(md_list)
1011
contents= []
1112
file_name= [i.split('/')[-1].split('.md')[0]for iin md_list]
1213
file_name=dict([(i.split('.')[0], i)for iin file_name])
1314
## 给总结md加入title
14-
withopen(md_list[0],'r')as f:
15-
lines= f.readlines()
15+
withopen(md_list[0],'r')as f:
16+
lines= f.readlines()
1617
new_lines= []
1718
for iin lines:
1819
if i.strip():
@@ -36,5 +37,29 @@ for a in dirs:
3637

3738

3839

39-
1. 总结文档里填充名字
40+
```
41+
dirs = os.listdir('/Users/lixiang.2533/Desktop/Blogs/Leetcode/')
42+
dir = '/Users/lixiang.2533/Desktop/Blogs/Leetcode'
43+
dirs = ['二分法']
44+
for a in dirs:
45+
md_list = glob(os.path.join(dir, a, '*.md'))
46+
md_list = sorted(md_list)
47+
contents = []
48+
49+
for md in md_list:
50+
md_name = md.split('/')[-1]
51+
contents.append('### ' + md_name + "\n")
52+
with open(md, 'r') as f:
53+
contents.append(f.read() + "\n")
54+
55+
with open(os.path.join(dir, "{}总结.md".format(a)), "w") as f:
56+
f.writelines(contents)
57+
58+
```
59+
60+
61+
62+
63+
64+
4065

‎二分法/0.二分法总结.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
- 找target
2-
-33 搜索旋转排序数组
2+
-69 x 的平方根:牛顿法
33
- 74 搜索二维矩阵
4-
- 367 有效的完全平方数
4+
- 367 有效的完全平方数:牛顿法
55
- 374 猜数字大小
66
- 704 二分查找
77
- 找边界
8-
- 34 在排序数组中查找元素的第一个和最后一个位置
8+
- 34 在排序数组中查找元素的第一个和最后一个位置:注意判断是否存在该元素
99
- 35 搜索插入位置
1010
- 278 第一个错误的版本
1111
- 441 排列硬币
12-
- 牛顿法
13-
- 69 x 的平方根
14-
- 367 有效的完全平方数
15-
- divide
16-
- 29 两数相除
17-
- 50 Pow(x, n)
1812
- 有技巧的二分法
19-
- 81 搜索旋转排序数组 II
20-
- 153 寻找旋转排序数组中的最小值
21-
- 162 寻找峰值
22-
- 240 搜索二维矩阵 II
13+
- 29 两数相除
14+
- 旋转数组
15+
- 33 搜索旋转排序数组:左右闭区间,
16+
- 81 搜索旋转排序数组 II:在33的基础上对所有mid=left/right无法判断搜索方向的场景跳过
17+
- 153 寻找旋转排序数组中的最小值:开区间,只能和右边界进行判断,避免从小值跳到大值
18+
- 162 寻找峰值:通过mid左右值大小判断搜索方向
19+
- 240 搜索二维矩阵 II:Z字形搜索(每个点都有唯一的搜索方向)

‎二分法/153. 寻找旋转排序数组中的最小值.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,21 @@
4242
```python
4343
classSolution:
4444
deffindMin(self,nums: List[int]) ->int:
45-
n=len(nums)
46-
start=0
47-
end= n-1
45+
start=0
46+
end=len(nums)-1
4847
while start< end:
4948
mid= (start+end)//2
50-
if nums[mid]> nums[end]:
51-
start= mid+1
52-
else:
49+
if nums[mid]< nums[end]:
5350
end= mid
51+
else:
52+
start= mid+1
5453
return nums[start]
5554
```
5655

5756

5857

5958
Tips
6059

61-
注意这里左右边界不对称只能和右边界比较,因为
60+
1. 判断mid位置:因为前面的数组大,后面的数组小,所以这里左右不对称只能判断mid和右节点的关系
61+
62+
2. 这题不好用双闭区间来解,所以左闭右开,异动不对称,避免mid在右区间的时候被移动到左区间

‎二分法/240. 搜索二维矩阵 II.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77

88

9+
910
示例 1:
1011

1112
输入:matrix =[[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
@@ -73,4 +74,4 @@ class Solution:
7374
returnFalse
7475
```
7576

76-
因为行列都单调所以可以Z字型进行搜索
77+
因为行列都单调所以可以Z字型进行搜索,从第一行的最后一列开始搜索

‎二分法/33. 搜索旋转排序数组.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,32 @@
3434

3535

3636

37+
3738
```python
3839
classSolution:
3940
defsearch(self,nums: List[int],target:int) ->int:
40-
start=0
41+
start=0
4142
end=len(nums)-1
42-
while start<=end:
43+
while start<=end:
4344
mid= (start+end)//2
4445
if nums[mid]==target:
45-
return mid
46-
47-
if nums[mid]< nums[start]:
48-
if nums[mid]<target<=nums[end]:
46+
return mid
47+
if nums[mid]< nums[start]:
48+
if nums[mid]< target<= nums[end]:
4949
start= mid+1
5050
else:
5151
end= mid-1
5252
else:
53-
if nums[start]<=target<nums[mid]:
53+
if nums[start]<=target<nums[mid]:
5454
end= mid-1
5555
else:
56-
start=mid+1
57-
return-1
56+
start=mid+1
57+
return-1
5858
```
5959

6060

6161

62-
1. 旋转数组相比非旋转数组,只多了一步对中间值比左边高还是低的判断
62+
搜索旋转数组分两步
63+
64+
1. 和左/右边界比较确认mid是在左边还是在右边
65+
2. 判断target的位置确认向左/右搜索

‎二分法/81. 搜索旋转排序数组 II.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929

3030

31+
3132
进阶:
3233

3334
这是 搜索旋转排序数组 的延伸题目,本题中的 nums 可能包含重复元素。
@@ -43,31 +44,37 @@ class Solution:
4344
n=len(nums)
4445
start=0
4546
end= n-1
46-
while start<=end:
47+
while start<=end:
4748
mid= (start+end)//2
4849
if nums[mid]==target:
49-
returnTrue
50-
51-
if nums[mid]== nums[start]and nums[mid]==nums[end]:
50+
returnTrue
51+
52+
if nums[start]==nums[mid]:
5253
start+=1
54+
continue
55+
56+
if nums[end]==nums[mid]:
5357
end-=1
54-
continue
58+
continue
5559

56-
if nums[mid]< nums[start]:
57-
if nums[mid]<target<=nums[end]:
60+
61+
if nums[mid]< nums[start]:
62+
if nums[mid]< target<= nums[end]:
5863
start= mid+1
5964
else:
6065
end= mid-1
6166
else:
62-
if nums[start]<=target<nums[mid]:
67+
if nums[start]<=target<nums[mid]:
6368
end= mid-1
6469
else:
65-
start=mid+1
70+
start=mid+1
6671
returnFalse
6772
```
6873

6974

7075

7176
Tips
7277

73-
1. 在33题的基础上,因为数值可能存在重复,所以当mid和左右边界都相同的时候无法判断mid是否在被旋转的一遍,这个时候只能收缩两边的边界继续判断
78+
1. 在33题的基础上,因为数值可能存在重复,所以当左边界或者右边界和mid相同的时候都向内收缩一步再进行判断
79+
1.
80+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp