leetcode88 cpp
时间: 2024-08-30 07:00:20 浏览: 21
LeetCode第88题是一个经典的题目,通常被称为“旋转数组中的最小元素”(Minimum Absolute Difference in a Sorted Array)。这道题的目标是给定一个已经排序的整数数组,通过一次旋转操作(将数组从某个点开始顺时针或逆时针旋转),找出数组中的两个最小元素之间的最小差值。
在C++中解决这个问题,你可以采用二分查找的方式。首先找到数组的旋转点,然后分别在左半部分和右半部分找到最小的两个元素,计算它们的差值。以下是简化的伪代码:
```cpp
int findMinDifference(vector<int>& nums) {
if (nums.empty()) return 0;
int n = nums.size();
// 寻找旋转点,最坏情况下的复杂度 O(n)
int left = 0, right = n - 1;
while (nums[left] < nums[right]) {
if (nums[left] <= nums[(left + right) / 2])
right = (left + right) / 2;
else
left = (left + right + 1) / 2;
}
int pivot = left;
// 分别处理左半部分和右半部分,复杂度均为 O(logn)
int leftMin = nums[pivot];
for (int i = pivot; i < n; i++) {
leftMin = min(leftMin, nums[i]);
}
int rightMin = nums[0];
for (int i = 0; i < pivot; i++) {
rightMin = min(rightMin, nums[i]);
}
// 计算并返回最小差值
return abs(leftMin - rightMin);
}
```