📌  相关文章
📜  在数组的前半部分和后半部分中找到最大元素(1)

📅  最后修改于: 2023-12-03 15:23:33.901000             🧑  作者: Mango

在数组的前半部分和后半部分中找到最大元素

有时候我们需要在一个数组中找到这个数组两个部分中的最大元素,一个部分是从数组的开头到中间,另一个部分是从数组的中间到结尾。

我们可以使用以下方法来解决这个问题:

方法一:使用循环
#include <iostream>

using namespace std;

int findMax(int arr[], int size)
{
    int max1 = arr[0]; // 存储前半部分最大值
    int max2 = arr[size-1]; // 存储后半部分最大值
    int i;

    for (i = 1; i < size/2; i++) {
        if (arr[i] > max1) {
            max1 = arr[i];
        }
    }

    for (i = size/2; i < size; i++) {
        if (arr[i] > max2) {
            max2 = arr[i];
        }
    }

    if (max1 > max2) {
        return max1;
    } else {
        return max2;
    }
}

int main()
{
    int arr[] = {10, 20, 30, 40, 50, 60, 70, 80};
    int n = sizeof(arr)/sizeof(arr[0]);
    int max = findMax(arr, n);

    cout << "The maximum number in the two halves of the array is: " << max << endl;

    return 0;
}
方法二:使用递归
#include <iostream>

using namespace std;

int findMax(int arr[], int start, int end)
{
    if (start == end) {
        return arr[start];
    }

    if (end - start == 1) {
        if (arr[start] > arr[end]) {
            return arr[start];
        } else {
            return arr[end];
        }
    }

    int mid = (start + end) / 2;

    int max1 = findMax(arr, start, mid);
    int max2 = findMax(arr, mid+1, end);

    if (max1 > max2) {
        return max1;
    } else {
        return max2;
    }
}

int main()
{
    int arr[] = {10, 20, 30, 40, 50, 60, 70, 80};
    int n = sizeof(arr)/sizeof(arr[0]);
    int max = findMax(arr, 0, n-1);

    cout << "The maximum number in the two halves of the array is: " << max << endl;

    return 0;
}

以上两种方法都是可行的,具体选择哪种方法取决于程序的需求和个人喜好。

总结

在数组的前半部分和后半部分中找到最大元素可以使用循环或递归的方法。两种方法的代码实现细节不同,但都能得到正确的结果。具体选择哪种方法取决于程序的需求和个人喜好。