C++ 编程练习:查找支撑数
C++ 编程练习:查找支撑数
比赛题目
时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 16MB,其他语言 32MB
描述
在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大,你能找到它们吗?
输入描述
第一行为整数 m,表示输入的整数个数。( 3<= m <=100 ) 第二行为 m 个整数。
输出描述
若干个支撑数,每行一个。
用例输入 1
14 1 3 2 4 1 5 3 9 7 10 8 23 85 43
用例输出 1
3 4 5 9 10 85
c++ 内容:
#include <iostream>
#include <vector>
using namespace std;
vector<int> findSupportingNumbers(vector<int>& nums) {
vector<int> result;
int n = nums.size();
for (int i = 1; i < n - 1; i++) {
if (nums[i] > nums[i-1] && nums[i] > nums[i+1]) {
result.push_back(nums[i]);
}
}
return result;
}
int main() {
int m;
cin >> m;
vector<int> nums(m);
for (int i = 0; i < m; i++) {
cin >> nums[i];
}
vector<int> res = findSupportingNumbers(nums);
for (int i = 0; i < res.size(); i++) {
cout << res[i] << endl;
}
return 0;
}
该程序首先读取整数个数 m,然后读取 m 个整数并存储在一个 vector 中。接下来,使用一个循环遍历 vector 中的每一个数,判断它是否为一个支撑数。判断的条件是该数比左边和右边相邻的数都大。如果满足条件,则将该数加入到结果 vector 中。最后,输出结果 vector 中的所有数。
**时间复杂度分析:**该程序只需要遍历一次输入的整数,所以时间复杂度为 O(m)。
**空间复杂度分析:**空间复杂度为 O(n),其中 n 为满足条件的支撑数的个数。
原文地址: https://www.cveoy.top/t/topic/qjzQ 著作权归作者所有。请勿转载和采集!