使用数组查找最大差异
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;
【讨论】:
以上是关于使用数组查找最大差异的主要内容,如果未能解决你的问题,请参考以下文章