Day76 | 灵神 | 二分查找 寻找旋转排序数组中的最小值II 寻找峰值II

154.寻找旋转排序数组中的最小值II

154. 寻找旋转排序数组中的最小值 II - 力扣(LeetCode)

思路:

直接去看灵神的题解吧,笔者往后复习这道题的时候再回来看吧

154. 寻找旋转排序数组中的最小值 II - 力扣(LeetCode)

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int findMin(vector<int>& nums) {
int l=0,r=nums.size()-1;
while(l<r)
{
int mid=l+(r-l)/2;
if(nums[mid]==nums[r])
r--;
else if(nums[mid]<nums[r])
r=mid;
else
l=mid+1;
}
return nums[r];
}
};

1901.寻找峰值II

1901. 寻找峰值 II - 力扣(LeetCode)

思路:

太难了,笔者鸽了,大家看灵神的吧,等多做做题再说吧

1901. 寻找峰值 II - 力扣(LeetCode)

完整代码:

左闭右开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
int indexOfMax(vector<int>& a) {
return ranges::max_element(a) - a.begin();
}

public:
vector<int> findPeakGrid(vector<vector<int>> &mat) {
int left = 0, right = mat.size() - 1;
while (left < right) {
int i = left + (right - left) / 2;
int j = indexOfMax(mat[i]);
if (mat[i][j] > mat[i + 1][j]) {
right = i; // 峰顶行号 <= i
} else {
left = i + 1; // 峰顶行号 > i
}
}
return {left, indexOfMax(mat[left])};
}
};