4.算法设计(要求:分别用伪代码和C++语言描述算法,并分析时间复杂度) (1)找出整型数组A[n]中的最大值和次最大值。
时间: 2024-09-18 07:18:30 浏览: 68
算法设计:找出整数数组A[n]中的最大值和次大值。
**伪代码**:
```plaintext
1. 初始化两个变量 max = A[0], secondMax = A[0]
2. 遍历数组 A[1...n]:
a. 如果当前元素 A[i] > max:
i. 更新 max = A[i]
b. 否则如果当前元素大于 secondMax 且不等于 max:
ii. 更新 secondMax = A[i]
3. 返回 max 和 secondMax
```
**C++代码**:
```cpp
int findMaxAndSecondMax(int arr[], int n) {
if (n < 2) return -1; // If array is too small, there's no second max
int max = arr[0];
int secondMax = INT_MIN;
for (int i = 1; i < n; ++i) {
if (arr[i] > max) {
secondMax = max;
max = arr[i];
} else if (arr[i] > secondMax && arr[i] != max) {
secondMax = arr[i];
}
}
return max, secondMax;
}
```
**时间复杂度分析**:
这个算法的时间复杂度是O(n),其中n是数组的长度。因为需要遍历整个数组一次来比较每个元素。空间复杂度是O(1),因为我们只用了两个额外的空间来存储最大值和次大值。
阅读全文