更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。
组队打卡,更多解法等你一起来参与哦!
LeetCode 153. 寻找旋转排序数组中的最小值,难度中等。
暴力
解题思路:直接暴力遍历,但时间复杂度在 O ( N ) O(N) O(N)
class Solution {
public int findMin(int[] nums) {
int result = nums[0];
for (int i = 1; i < nums.length; ++i) {
if (nums[i] < result) {
return nums[i];
}
}
return result;
}
}
二分查找算法
解题思路:定义左右指针
-
在循环中,计算中间索引
mid
。 -
如果
nums[mid]
大于nums[right]
,说明最小值在mid
的右边。将left
移动到mid + 1
。 -
否则,说明最小值在
mid
的左边或mid
本身。将right
移动到mid
。
二分查找算法的时间复杂度在 O ( l o g N ) O(logN) O(logN)
class Solution {
public int findMin(int[] nums) {
int left = 0, right = nums.length - 1;
while (left < right) {
int mid = (left + right) / 2;
if (nums[mid] > nums[right]) {
left = mid + 1;
} else {
right = mid;
}
}
return nums[left];
}
}