Skip to content

Commit 1b77aa2

Browse files
committed
剑指offer刷题
1 parent ca43c8d commit 1b77aa2

29 files changed

+1340
-235
lines changed

.idea/$PROJECT_FILE$

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/.gitignore

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/algorithm.iml

+9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/Project_Default.xml

+39
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

+29
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/qaplug_profiles.xml

+465
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+30-7
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@
22
33
## 剑指offer(第二版)
44

5-
+ [面试题03:数组中重复的数字](offerbook/Test03.md)
6-
+ [面试题04:数组中的查找](offerbook/Test04.md)
7-
+ [面试题05:替换空格](offerbook/Test05.md)
8-
+ [面试题06:从尾到头打印链表](offerbook/Test06.md)
9-
+ [面试题07:重建二叉树](offerbook/Test07.md)
10-
+ [面试题08:二叉树的下一个节点](offerbook/Test08.md)
5+
+ [面试题03:数组中重复的数字](offerbook/Test03.md)
6+
+ [面试题04:数组中的查找](offerbook/Test04.md)
7+
+ [面试题05:替换空格](offerbook/Test05.md)
8+
+ [面试题06:从尾到头打印链表](offerbook/Test06.md)
9+
+ [面试题07:重建二叉树](offerbook/Test07.md)
10+
+ [面试题08:二叉树的下一个节点](offerbook/Test08.md)
11+
+ [面试题09:用两个栈实现队列](offerbook/Test09.md)
12+
+ [面试题10-1: 斐波那契数列](offerbook/Test10.md)
13+
+ [面试题10-2: 青蛙跳台阶问题](offerbook/Test10-2.md)
14+
+ [面试题10-3: 矩形覆盖](offerbook/Test10-3.md)
15+
+ [面试题10-4: 变态跳台阶](offerbook/Test10-4.md)
16+
+ [面试题11: 旋转数组的最小数字](offerbook/Test11.md)
17+
+ [面试题12: 矩阵中的路径](offerbook/Test12.md)
1118

1219

1320

@@ -18,11 +25,17 @@
1825
### Easy
1926

2027
+ [217. 存在重复元素](leetcode/217.md)
28+
+ [509. 斐波那契数](leetcode/509.md)
2129

2230
### Medium
2331

32+
+ [240. 搜索二维矩阵 II](leetcode/240.md)
33+
+ [105.从前序与中序遍历序列构造二叉树](leetcode/105.md)
34+
2435
### Hard
2536

37+
+ [154.寻找旋转排序数组中的最小值 II](leetcode/154.md)
38+
2639

2740

2841

@@ -35,4 +48,14 @@
3548

3649
### 数组
3750

38-
+ [217. 存在重复元素](leetcode/217.md)
51+
+ [E217. 存在重复元素](leetcode/217.md)
52+
+ [M240. 搜索二维矩阵 II](leetcode/240.md)
53+
+ [M79. 单词搜索](leetcode/79.md)
54+
55+
###
56+
57+
+ [M105.从前序与中序遍历序列构造二叉树](leetcode/105.md)
58+
59+
### 递归
60+
61+
+ [E509. 斐波那契数](leetcode/509.md)

Test.md

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# 面试题09:
2+
3+
## 题目描述
4+
5+
6+
7+
## 示例
8+
9+
示例 1:
10+
11+
12+
13+
```
14+
15+
```
16+
17+
18+
19+
20+
示例 2:
21+
22+
```
23+
24+
```
25+
26+
27+
28+
29+
提示:
30+
31+
```
32+
33+
```
34+
35+
36+
37+
# Code
38+
39+
```java
40+
41+
```
42+
43+
# 题解
44+

leetcode/105.md

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# 105. 从前序与中序遍历序列构造二叉树
2+
3+
## 题目描述
4+
5+
根据一棵树的前序遍历与中序遍历构造二叉树。
6+
7+
**注意:**
8+
你可以假设树中没有重复的元素。
9+
10+
## 示例
11+
12+
例如,给出
13+
14+
```
15+
前序遍历 preorder = [3,9,20,15,7]
16+
中序遍历 inorder = [9,3,15,20,7]
17+
```
18+
19+
20+
返回如下的二叉树:
21+
22+
3
23+
/ \
24+
9 20
25+
/ \
26+
15 7
27+
28+
29+
# Code
30+
31+
```java
32+
class Solution {
33+
public TreeNode buildTree(int[] preorder, int[] inorder) {
34+
if(preorder.length==0||inorder.length==0){
35+
return null;
36+
}
37+
TreeNode root=new TreeNode (preorder[0]);
38+
for(int i=0;i<preorder.length;i++){
39+
if(preorder[0]==inorder[i]){
40+
root.left=buildTree(Arrays.copyOfRange(preorder,1,i+1),Arrays.copyOfRange(inorder,0,i));
41+
root.right=buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length));
42+
break;
43+
}
44+
}
45+
return root;
46+
}
47+
}
48+
```
49+
50+
# 题解
51+
52+
https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solution/cong-qian-xu-he-zhong-xu-bian-li-xu-lie-gou-zao-er/

leetcode/154.md

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# 154. 寻找旋转排序数组中的最小值 II
2+
3+
## 题目描述
4+
5+
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
6+
7+
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
8+
9+
请找出其中最小的元素。
10+
11+
注意数组中可能存在重复的元素。
12+
13+
14+
15+
## 示例
16+
17+
示例 1:
18+
19+
20+
21+
```
22+
输入: [1,3,5]
23+
输出: 1
24+
```
25+
26+
27+
28+
29+
示例 2:
30+
31+
```
32+
输入: [2,2,2,0,1]
33+
输出: 0
34+
```
35+
36+
37+
38+
说明:
39+
40+
- 这道题是 [寻找旋转排序数组中的最小值](https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/description/) 的延伸题目。
41+
- 允许重复会影响算法的时间复杂度吗?会如何影响,为什么?
42+
43+
44+
45+
46+
47+
# Code
48+
49+
### Solution1
50+
51+
```java
52+
public int findMin(int[] nums) {
53+
int min=Integer.MAX_VALUE;
54+
for(int num:nums){
55+
if(num<min){
56+
min=num;
57+
}
58+
}
59+
return min;
60+
}
61+
```
62+
63+
**复杂度分析**
64+
65+
时间复杂度:O(N)。
66+
空间复杂度:O(1)。
67+
68+
### Solution2
69+
70+
二分法
71+
72+
```java
73+
class Solution {
74+
public int findMin(int[] nums) {
75+
int left = 0;
76+
int right = nums.length - 1;
77+
while (left < right) {
78+
int mid = (left + right) / 2;
79+
if (nums[mid] < nums[right]) {
80+
right = mid;
81+
} else if (nums[mid] > nums[right]) {
82+
left = mid + 1;
83+
} else {
84+
right -= 1;
85+
}
86+
}
87+
return nums[left];
88+
}
89+
}
90+
```
91+
92+
**复杂度分析**
93+
94+
时间复杂度:O(logN)。
95+
空间复杂度:O(1)。
96+
97+
98+
99+
100+
101+
# 题解
102+
103+
https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/solution/154-find-minimum-in-rotated-sorted-array-ii-by-jyd/

0 commit comments

Comments
 (0)