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 为满足条件的支撑数的个数。

C++ 编程练习:查找支撑数

原文地址: https://www.cveoy.top/t/topic/qjzQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录