文章目录
1、题目描述2、解题思路3、解题代码
1、题目描述
2、解题思路
画个示意图来表示旋转后的数组:
采用二分查找的思路:
1、如果 nums[mid] 大于右侧,说明右侧就是最小值;
2、如果 nums[mid] 小于左侧,说明左侧就是最小值;
3、如果 nums[mid] 即不大于右侧,也不小于左侧,说明在其中一边:
如果 nums[mid] 大于 nums[0],说明此时在左侧;反之,此时在右侧。
3、解题代码
class Solution {
public int findMin(int[] nums
) {
if (nums
.length
== 1) {
return nums
[0];
}
int left
= 0, right
= nums
.length
- 1;
if (nums
[right
] > nums
[0]) {
return nums
[0];
}
while (left
<= right
) {
int mid
= left
+ (right
- left
) / 2;
if (nums
[mid
] > nums
[mid
+ 1]) {
return nums
[mid
+ 1];
}
if (nums
[mid
- 1] > nums
[mid
]) {
return nums
[mid
];
}
if (nums
[mid
] > nums
[0]) {
left
= mid
+ 1;
} else {
right
= mid
- 1;
}
}
return -1;
}
}