File tree 6 files changed +273
-10
lines changed
6 files changed +273
-10
lines changed Original file line number Diff line number Diff line change 16
16
+ [ 面试题11: 旋转数组的最小数字] ( offerbook/Test11.md )
17
17
+ [ 面试题12: 矩阵中的路径] ( offerbook/Test12.md )
18
18
+ [ 面试题13: 机器人的运动范围] ( offerbook/Test13.md )
19
- + [ 面试题14-1: 剪绳子] ( offerbook/Test14.md )
20
-
21
-
19
+ + [ 面试题14-1:剪绳子] ( offerbook/Test14.md )
20
+ + [ 面试题14-2:剪绳子] ( offerbook/Test14.md )
21
+ + [ 面试题15:二进制中1的个数] ( offerbook/Test15.md )
22
+ + [ 面试题16:数值的整数次方] ( offerbook/Test16.md )
22
23
23
24
24
25
28
29
29
30
+ [ 217. 存在重复元素] ( leetcode/217.md )
30
31
+ [ 509. 斐波那契数] ( leetcode/509.md )
32
+ + [ 191. 位1的个数] ( leetcode/191.md )
31
33
32
34
### Medium
33
35
34
36
+ [ 240. 搜索二维矩阵 II] ( leetcode/240.md )
35
37
+ [ 105.从前序与中序遍历序列构造二叉树] ( leetcode/105.md )
36
38
+ [ 343. 整数拆分] ( leetcode/343.md )
39
+ + [ 50. Pow(x, n)] ( leetcode/50.md )
37
40
38
41
### Hard
39
42
40
43
+ [ 154.寻找旋转排序数组中的最小值 II] ( leetcode/154.md )
41
44
42
45
43
46
44
-
45
-
46
-
47
-
48
-
49
-
50
47
## leetcode(按类型分)
51
48
52
49
### 数组
59
56
60
57
+ [ M105.从前序与中序遍历序列构造二叉树] ( leetcode/105.md )
61
58
59
+ ### 位运算
60
+
61
+ + [ E191. 位1的个数] ( leetcode/191.md )
62
+
62
63
### 递归
63
64
64
65
+ [ E509. 斐波那契数] ( leetcode/509.md )
66
+ + [ M50. Pow(x, n)] ( leetcode/50.md )
65
67
66
68
### 动态规划
67
69
68
- + [ M343. 整数拆分] ( leetcode/343.md )
70
+ + [ M343. 整数拆分] ( leetcode/343.md )
71
+
72
+
73
+
Original file line number Diff line number Diff line change
1
+ # 191. 位1的个数
2
+
3
+ ## 题目描述
4
+
5
+ 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为[ 汉明重量] ( https://baike.baidu.com/item/汉明重量 ) )。
6
+
7
+ ## 示例
8
+
9
+ 示例 1:
10
+
11
+ ```
12
+ 输入:00000000000000000000000000001011
13
+ 输出:3
14
+ 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
15
+
16
+ ```
17
+
18
+
19
+
20
+
21
+ 示例 2:
22
+
23
+ ```
24
+ 输入:00000000000000000000000010000000
25
+ 输出:1
26
+ 解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
27
+
28
+ ```
29
+
30
+
31
+
32
+
33
+ 示例 3:
34
+
35
+ ```
36
+ 输入:11111111111111111111111111111101
37
+ 输出:31
38
+ 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
39
+
40
+ ```
41
+
42
+
43
+
44
+
45
+ 提示:
46
+
47
+ ```
48
+ 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
49
+
50
+ 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。
51
+ ```
52
+
53
+ ** 进阶** :
54
+ 如果多次调用这个函数,你将如何优化你的算法?
55
+
56
+ # Code
57
+
58
+ ### Solution1
59
+
60
+ 普通解法
61
+
62
+ ``` java
63
+ public class Solution {
64
+ // you need to treat n as an unsigned value
65
+ public int hammingWeight (int n ) {
66
+ return (int ) Integer . toBinaryString(n). chars(). mapToObj(c - > (char ) c). filter(character - > character == ' 1' ). count();
67
+
68
+ }
69
+ }
70
+ ```
71
+
72
+ ### Solution2
73
+
74
+ 位运算
75
+
76
+ ``` java
77
+ public class Solution {
78
+ // you need to treat n as an unsigned value
79
+ public int hammingWeight (int n ) {
80
+ int mask = 1 ;
81
+ int result = 0 ;
82
+ while (n != 0 ) {
83
+ result += n & mask;
84
+ n = n >>> 1 ;
85
+ }
86
+ return result;
87
+
88
+ }
89
+ }
90
+ ```
91
+
92
+
93
+
94
+
95
+
96
+ # 题解
97
+
98
+ https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/solution/mian-shi-ti-15-er-jin-zhi-zhong-1de-ge-shu-wei-yun/
Original file line number Diff line number Diff line change
1
+ # 50. Pow(x, n)
2
+
3
+ ## 题目描述
4
+
5
+ 实现 [ pow(* x* , * n* )] ( https://www.cplusplus.com/reference/valarray/pow/ ) ,即计算 x 的 n 次幂函数。
6
+
7
+ ## 示例
8
+
9
+ 示例 1:
10
+
11
+ ```
12
+ 输入: 2.00000, 10
13
+ 输出: 1024.00000
14
+ ```
15
+
16
+
17
+
18
+
19
+ 示例 2:
20
+
21
+ ```
22
+ 输入: 2.10000, 3
23
+ 输出: 9.26100
24
+ ```
25
+
26
+
27
+
28
+
29
+ 示例 3:
30
+
31
+ ```
32
+ 输入: 2.00000, -2
33
+ 输出: 0.25000
34
+ 解释: 2-2 = 1/22 = 1/4 = 0.25
35
+ ```
36
+
37
+
38
+
39
+
40
+ 提示:
41
+
42
+ ```
43
+ -100.0 < x < 100.0
44
+ n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
45
+ ```
46
+
47
+
48
+
49
+ # Code
50
+
51
+ ### Solution1
52
+
53
+ 暴力解法
54
+
55
+ ``` java
56
+ class Solution {
57
+ public double myPow (double x , int n ) {
58
+ if (n == 0 || x == 1 ) return 1 ;
59
+ double res = 1 ;
60
+ int m = Math . abs(n);
61
+ while (m != 0 ) {
62
+ res *= x;
63
+ -- m;
64
+ }
65
+
66
+ return n > 0 ? res : 1 / res;
67
+ }
68
+ }
69
+ ```
70
+
71
+ ### Solution2
72
+
73
+
74
+
75
+ # 题解
76
+
Original file line number Diff line number Diff line change
1
+ # 面试题14-1: 剪绳子
2
+
3
+ ## 题目描述
4
+
5
+ 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[ 0] ,k[ 1] ...k[ m] 。请问 k[ 0] * k[ 1] * ...* k[ m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
6
+
7
+ ** 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。(与上一题区别之处)**
8
+
9
+ ## 示例
10
+
11
+ 示例 1:
12
+
13
+
14
+
15
+ ```
16
+ 输入: 2
17
+ 输出: 1
18
+ 解释: 2 = 1 + 1, 1 × 1 = 1
19
+ ```
20
+
21
+
22
+
23
+
24
+ 示例 2:
25
+
26
+ ```
27
+ 输入: 10
28
+ 输出: 36
29
+ 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36
30
+ ```
31
+
32
+
33
+
34
+
35
+ 提示:
36
+
37
+ ```
38
+ 2 <= n <= 1000
39
+ ```
40
+
41
+
42
+
43
+ # Code
44
+
45
+ ``` java
46
+ class Solution {
47
+ public int cuttingRope (int n ) {
48
+
49
+ // 当 n <= 3 时,按照贪心规则应直接保留原数字,但由于题目要求必须拆分,因此必须拆出一个 1,即直接返回 n - 1;
50
+ if (n <= 3 ) return n - 1 ;
51
+ long result = 0 ;
52
+ // 求 n 除以 3 的整数部分 a 和余数部分 b;
53
+ int a = n / 3 , b = n % 3 ;
54
+ // 当 b == 0时,直接返回 3^a
55
+ if (b == 0 ) result = pow(a);
56
+ // 当 b == 1 时,要将一个 1 + 3转换为 2+2,此时返回 3^{a-1} * 2 * 2
57
+ if (b == 1 ) result = (pow(a - 1 ) * 2 % 1000000007 ) * 2 ;
58
+ // 当 b == 2 时,返回 3^a * b
59
+ if (b == 2 ) result = (pow(a) * b);
60
+ return (int ) result % 1000000007 ;
61
+ }
62
+
63
+ private int pow (int a ){
64
+ long result = 1 ;
65
+ for (int i = 0 ; i < a; i++ ) {
66
+ result = (result * 3 ) % 1000000007 ;
67
+ }
68
+ return (int ) result;
69
+ }
70
+ }
71
+ ```
72
+
73
+ # 题解
74
+
75
+ https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/solution/mian-shi-ti-14-ii-jian-sheng-zi-iitan-xin-er-fen-f/
76
+
Original file line number Diff line number Diff line change
1
+ # 面试题15:二进制中1的个数
2
+
3
+ 参见[ Leetcode191题] ( ../leetcode/191.md )
4
+
Original file line number Diff line number Diff line change
1
+ # 面试题16:数值的整数次方
2
+
3
+ 参见[ Leetcode50题] ( ../leetcode/50.md )
4
+
You can’t perform that action at this time.
0 commit comments