File tree Expand file tree Collapse file tree 5 files changed +94
-10
lines changed
Expand file tree Collapse file tree 5 files changed +94
-10
lines changed Original file line number Diff line number Diff line change 8989151. 颠倒字符串中的单词
9090152. 乘积最大子数组
9191153. 寻找旋转排序数组中的最小值
92+ 154. 寻找旋转排序数组中的最小值 II
9293155. 最小栈
9394160. 相交链表
9495162. 寻找峰值
Original file line number Diff line number Diff line change 1010九、位运算
1111十、数学
1212十一、图
13+ 十二、二分查找
1314
1415
1516一、树
16216311. 盛最多水的容器(双指针)
16316415. 三数之和(三指针)
16416531. 下一个排列(置换)
165- 33. 搜索旋转排序数组(二分查找)
166- 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
16716641. 缺失的第一个正数(置换,排序,集合)
16816748. 旋转图像(置换)
16916854. 螺旋矩阵(四指针)
17016956. 合并区间(二维数组排序)
17117059. 螺旋矩阵 II(四指针)
17217175. 颜色分类(单指针,双指针)
173- 81. 搜索旋转排序数组 II(二分查找)
17417288. 合并两个有序数组(排序,双指针)
175173128. 最长连续序列(集合,排序)
176174136. 只出现一次的数字(哈希表,列表,位运算)
177- 153. 寻找旋转排序数组中的最小值(二分查找)
178- 162. 寻找峰值(二分查找)
179175169. 多数元素(排序,哈希表,投票,计数,分治)
180176215. 数组中的第K个最大元素(快速排序,堆排序)
181177238. 除自身以外数组的乘积(前缀和)
191187560. 和为 K 的子数组(前缀和,哈希表)
192188581. 最短无序连续子数组(排序,双指针)
193189621. 任务调度器(桶填充)
194- 704. 二分查找
195190867. 转置矩阵(置换)
196191
197192
221216
222217
223218十、数学
224- 29. 两数相除(二分查找)
225- 69. x 的平方根(二分查找)
226219470. 用 Rand7() 实现 Rand10()(拒绝采样)
227220
221+
228222十一、图
229223207. 课程表(拓扑排序)
230- 399. 除法求值(并查集)
224+ 399. 除法求值(并查集)
225+
226+
227+ 十二、二分查找
228+ 4. 寻找两个有序数组的中位数(排序,双指针,二分查找)
229+ 29. 两数相除(二分查找)
230+ 33. 搜索旋转排序数组(二分查找)
231+ 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
232+ 81. 搜索旋转排序数组 II(二分查找)
233+ 69. x 的平方根(二分查找)
234+ 153. 寻找旋转排序数组中的最小值(二分查找)
235+ 154. 寻找旋转排序数组中的最小值 II(二分查找)
236+ 162. 寻找峰值(二分查找)
237+ 240. 搜索二维矩阵 II(二分查找)
238+ 287. 寻找重复数(哈希表,快慢指针,二分查找,位运算)
239+ 704. 二分查找
Original file line number Diff line number Diff line change 33
44/*
55二分查找:二分寻找最小值索引
6-
6+ --------------------------------------------------------------------
77递增序列:
88 *
99 *
2020 *
2121 *
2222 *
23+ ---------------------------------------------------------------------
24+ 例一: 1 2 3 4 5
25+ 右排序数组
26+ 例二: 3 4 5 | 1 2
27+ 左排序数组 右排序数组
2328
29+ 1、寻找旋转数组的最小元素即为寻找 右排序数组 的首个元素 nums[x],称 x 为 旋转点
30+ 2、左排序数组任一元素 >= 右排序数组任一元素
31+ 3、中值跟右值比较,而不跟左值比较的原因是,右值一定在右排序数组,左值不一定在左排序数组,所以跟左值比较时不能确定中值在哪个排序数组,从而无法确定缩小区间范围
32+ 如例一左值在右排序数组,例二左值在左排序数组
33+ ---------------------------------------------------------------------
24343 4 5 1 2
2535↑ ↑ ↑
2636l mid r
Original file line number Diff line number Diff line change 1+ // 154. 寻找旋转排序数组中的最小值 II
2+ // 剑指offer同题“11. 旋转数组的最小数字”
3+
4+ /*
5+ 1、二分查找,比“153. 寻找旋转排序数组中的最小值”多了重复元素
6+ 2、当中值等于右值时,无法区分二段性,让右指针左移,去掉一个干扰项
7+
8+ 7 0 1 1 1 1 1 2 3 4
9+ ↑ ↑ ↑
10+ l m r
11+ =============================
12+ 7 0 1 1 1 1 1 2 3 4
13+ ↑ ↑ ↑
14+ l m r
15+ =============================
16+ 7 0 1 1 1 1 1 2 3 4
17+ ↑ ↑ ↑
18+ l m r
19+ =============================
20+ 7 0 1 1 1 1 1 2 3 4
21+ ↑ ↑
22+ l/m r
23+ =============================
24+ 7 0 1 1 1 1 1 2 3 4
25+ ↑
26+ l/r
27+ */
28+ class Solution {
29+ public int findMin (int [] nums ) {
30+ int left = 0 , right = nums .length - 1 ;
31+ while (left < right ) {
32+ int mid = (left + right ) / 2 ;
33+ if (nums [mid ] < nums [right ]) {
34+ right = mid ;
35+ } else if (nums [mid ] > nums [right ]) {
36+ left = mid + 1 ;
37+ } else {
38+ right --;
39+ }
40+ }
41+ return nums [left ];
42+ }
43+ }
Original file line number Diff line number Diff line change 11// 11. 旋转数组的最小数字
2+ // 力扣同题“154. 寻找旋转排序数组中的最小值 II”
3+
4+ /*
5+ 二分查找
6+ */
7+ public class Solution {
8+ public int minNumberInRotateArray (int [] array ) {
9+ int left = 0 , right = array .length - 1 ;
10+ while (left < right ) {
11+ int mid = (left + right ) / 2 ;
12+ if (array [mid ] < array [right ]) {
13+ right = mid ;
14+ } else if (array [mid ] > array [right ]) {
15+ left = mid + 1 ;
16+ } else {
17+ right --;
18+ }
19+ }
20+ return array [left ];
21+ }
22+ }
223
324
425/*
You can’t perform that action at this time.
0 commit comments