访问量: 9 次浏览
给定一个数组,编写函数来找到其中的最小和最大元素。
例子:
// C++程序查找最小值(或最大值)
// 在数组中。
#include <iostream>
using namespace std;
int getMin(int arr[], int n)
{
int res = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] < res)
res = arr[i];
return res;
}
int getMax(int arr[], int n)
{
int res = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] > res)
res = arr[i];
return res;
}
int main()
{
int arr[] = {12, 1234, 45, 67, 1};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "数组中的最小元素:" << getMin(arr, n) << endl;
cout << "数组中的最大元素:" << getMax(arr, n) << endl;
return 0;
}
输出:
数组中的最小元素:1
数组中的最大元素:1234
时间复杂度:O(n)
辅助空间:O(1),因为没有使用额外空间。
递归解决方案
例子:
// C++程序查找
// in an array.
#include <iostream>
using namespace std;
int getMin(int arr[], int n)
{
// 如果只有一个元素,请返回它。
// 否则返回第一个元素的最小值和
// 剩余数组的最小值。
return (n == 1) ? arr[0] : min(arr[0],
getMin(arr + 1, n-1));
}
int getMax(int arr[], int n)
{
// 如果只有一个元素,请返回它。
// 否则返回第一个元素的最大值和
// 剩余数组的最大值。
return (n == 1) ? arr[0] : max(arr[0],
getMax(arr + 1, n-1));
}
int main()
{
int arr[] = {12, 1234, 45, 67, 1};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "数组中的最小元素:" << getMin(arr, n) << endl;
cout << "数组中的最大元素:" << getMax(arr, n) << endl;
return 0;
}
输出:
数组中的最小元素:1
数组中的最大元素:1234
时间复杂度:O(n)
辅助空间:O(n),因为由于递归使用了隐式堆栈。
使用库函数:我们可以使用 min_element() 和 max_element() 来查找数组的最小值和最大值。
例子:
// C++程序查找最小(或最大)元素
// 在数组中。
#include <iostream>
#include <algorithm>
using namespace std;
int getMin(int arr[], int n)
{
return *min_element(arr, arr + n);
}
int getMax(int arr[], int n)
{
return *max_element(arr, arr + n);
}
int main()
{
int arr[] = {12, 1234, 45, 67, 1};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "数组中的最小元素:" << getMin(arr, n) << endl;
cout << "数组中的最大元素:" << getMax(arr, n) << endl;
return 0;
}
输出:
数组中的最小元素:1
数组中的最大元素:1234
时间复杂度:O(n)
辅助空间:O(1),因为没有使用额外空间。