在C ++中的数组中找到局部最小值
假设我们有一个包含n个元素的数组A。我们必须找到数组的局部最小值。在数组A中,如果元素A [x]小于或等于两个邻居,则称其为局部最小值。对于拐角元素,仅考虑一个邻居。并且如果有多个以上的本地最小值可用,则仅返回一个。例如,如果数组是[9、6、3、14、5、7、4],则局部最小值可以是3、5和4,因此此算法只能返回其中之一。
为了解决这个问题,我们将遵循类似于二进制搜索的逻辑。如果中间元素小于其左元素和右元素,则返回mid,否则,如果它大于左邻元素,则左侧可能有一些局部最小值,如果大于右元素,则存在将是右边的一些局部最小值,为他们执行相同的任务以找到确切的局部最小值。
示例
#include<iostream>using namespace std;
int localMinima(int arr[], int left, int right, int n) {
int mid = left + (right - left)/2;
if ((mid == 0 || arr[mid-1] > arr[mid]) && (mid == n-1 || arr[mid+1] > arr[mid]))
return mid;
else if (mid > 0 && arr[mid-1] < arr[mid])
return localMinima(arr, left, (mid -1), n);
return localMinima(arr, (mid + 1), right, n);
}
int findLocalMinima(int arr[], int n) {
return localMinima(arr, 0, n-1, n);
}
int main() {
int arr[] = {9, 6, 3, 14, 5, 7, 4};
int n = sizeof(arr)/sizeof(arr[0]);
cout << "Local minima is: " << arr[findLocalMinima(arr, n)];
}
输出结果
Local minima is: 3
以上是 在C ++中的数组中找到局部最小值 的全部内容, 来源链接: utcz.com/z/354285.html