使用数组查找最大差异

Posted

技术标签:

【中文标题】使用数组查找最大差异【英文标题】:Find Maximum Difference using array 【发布时间】:2021-12-24 08:35:12 【问题描述】:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()

    int num;
    long long max = 0;
    long long min;
    cin >> num;
    long long *ptr = new long long[num];
    for (int x = 0; x < num; x++)
    
        cin >> ptr[x];
    
    cout << "ptr for first elemnt" << endl;
    cout << ptr[0];
    for (int x = 1; x < num; x++) // 1 4 6 3 min 1  max 1
    
        max = ptr[0];
        if (max < ptr[x])
            max = ptr[x];
        min = ptr[0];
        if (min > ptr[x])
            min = ptr[x];
    

    cout << "max value " << max;
    cout << "Min value is " << min;
    cout << max - min; // biggest number minues smallest number

    return 0;

我试图找到数组中数字之间的最大差异,但我得到了数组中最大和最小差异最大的数字,但是当我检查最大值和最小值时,我发现它们是错误的,为什么会这样?

【问题讨论】:

您不需要数组。您可以在输入每个数字后跟踪最大值和最小值。 欢迎来到 Stack Overflow。请查看我们的intro section,特别注意minimal complete examples 上的页面。你给它什么数字?它是否正确找到最大值?分钟呢? 缩小范围,您可能会自己发现错误。 【参考方案1】:
for (int x = 1; x < num; x++) // 1 4 6 3 min 1  max 1

    max = ptr[0];
    if (max < ptr[x])
        max = ptr[x];
    min = ptr[0];
    if (min > ptr[x])
        min = ptr[x];

试试这个:

max = ptr[0];
min = ptr[0];
for (int x = 1; x < num; x++) // 1 4 6 3 min 1  max 1

    if (max < ptr[x])
        max = ptr[x];
    if (min > ptr[x])
        min = ptr[x];

问题是您每次都在重置 min 和 max,所以它基本上会变成 ptr[0] 或 ptr[n] ,两者之间没有可能的值。

这可能不是您唯一的问题,但这是一个开始。

【讨论】:

【参考方案2】:

或者,您可以使用minmax_element 算法来获取数组的最小值和最大值:

#include <algorithm> // minmax_element
#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main()

    int num;
    long long max = 0;
    long long min;
    cin >> num;
    long long *ptr = new long long[num];
    for (int x = 0; x < num; x++)
    
        cin >> ptr[x];
    
    cout << "ptr for first element: " << ptr[0] << "\n";

    auto [min_it, max_it] = std::minmax_element(ptr, ptr + num);
    cout << "max - min: " << *max_it - *min_it << "\n";

    return 0;

Demo

【讨论】:

【参考方案3】:

我要做的是先对数组进行排序,然后从最后一个数字中减去第一个数字(希望您了解指针)

#include <iostream>
#include <algorithm>

using namespace std;

int main()
    int num ; 
    cin >> num ;
    int*ptr = new int[num];
    for(int i=0 ; i<num ; i++)
        cin >> ptr[i];
    
    sort(ptr , ptr+num);
    int max_diff = ptr[num-1] - ptr[0];
    cout << "max difference is " << max_diff;
    return 0;

【讨论】:

以上是关于使用数组查找最大差异的主要内容,如果未能解决你的问题,请参考以下文章

ArrayIndexOutOfBoundsException,同时找到数组中两个连续元素之间的最大差异

PHP:查找值的数组差异[重复]

PHP:查找值的数组差异[重复]

查找 2 个大型数组之间的差异

在数组中查找具有最小差异和连续元素的 2 个子集

使用LINQ在数组中查找最小和最大日期?