C++ 实现找出最长连续上升段的长度和起始位置
以下是实现找出最长连续上升段的长度以及它的起始位置的 C++ 代码: ```cpp #include <iostream> #include <vector> using namespace std; // 函数用于找出最长连续上升段的长度和起始位置 pair<int, int> findLongestIncreasingSegment(const vector<int>& nums) { int n = nums.size(); if (n == 0) return {0, 0}; int maxLength = 1; // 最长连续上升段的长度,至少为 1 int startPos = 1; // 最长连续上升段的起始位置,初始为 1 int currentLength = 1; // 当前连续上升段的长度 int currentStart = 1; // 当前连续上升段的起始位置 for (int i = 1; i < n; ++i) { if (nums[i] > nums[i - 1]) { // 如果当前数字比前一个数字大,连续上升段长度加 1 ++currentLength; } else { // 连续上升段中断,更新最长连续上升段信息 if (currentLength > maxLength) { maxLength = currentLength; startPos = currentStart; } // 重置当前连续上升段信息 currentLength = 1; currentStart = i + 1; } } // 处理最后一个连续上升段 if (currentLength > maxLength) { maxLength = currentLength; startPos = currentStart; } return {maxLength, startPos}; } int main() { int N; cout << "请输入整数的个数 N: "; cin >> N; vector<int> nums(N); cout << "请输入 " << N << " 个整数: "; for (int i = 0; i < N; ++i) { cin >> nums[i]; } pair<int, int> result = findLongestIncreasingSegment(nums); cout << "最长连续上升段的长度: " << result.first << endl; cout << "最长连续上升段的起始位置: " << result.second << endl; return 0; } ``` ### 代码解释 - **`findLongestIncreasingSegment` 函数**: - 该函数接受一个整数向量 `nums` 作为输入。 - 使用 `maxLength` 记录最长连续上升段的长度,`startPos` 记录其起始位置。 - `currentLength` 和 `currentStart` 分别记录当前连续上升段的长度和起始位置。 - 遍历向量 `nums`,如果当前数字比前一个数字大,`currentLength` 加 1;否则,更新 `maxLength` 和 `startPos`,并重置 `currentLength` 和 `currentStart`。 - 最后处理最后一个连续上升段。 - **`main` 函数**: - 读取整数的个数 `N` 和 `N` 个整数。 - 调用 `findLongestIncreasingSegment` 函数得到最长连续上升段的长度和起始位置。 - 输出结果。 ### 复杂度分析 - **时间复杂度**:$O(n)$,其中 $n$ 是向量的长度。只需要遍历一次向量。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间。 ### 开发建议 - **输入验证**:在实际应用中,应该对用户输入进行验证,确保输入的合法性。 - **错误处理**:可以添加错误处理机制,例如当输入的整数个数为负数时给出相应的提示。 - **代码复用**:可以将输入读取和结果输出封装成独立的函数,提高代码的复用性。 ######[AI写代码神器 | 895点数解答 | 2026-08-22 20:13:49]
- 数轴旅行:从原点出发,能否到达目标位置?(字节豆包 | 225点数解答 | 2026-01-23 19:51:03)139
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)565
- 深入解析洛谷打卡系统:规则揭秘与代码实现(字节豆包 | 316点数解答 | 2025-11-16 19:45:59)201
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)478
- Python Tkinter 代码剖析:GUI 程序搭建与窗口居中函数解析(字节豆包 | 314点数解答 | 2024-08-02 14:49:22)391
- 巧用 CDN 搭建含照片轮播、社交链接与 AI 对话的单页个人网页(字节豆包 | 485点数解答 | 2024-10-28 23:31:13)312
- 巧用 CDN 搭建单页个人网页:含照片轮播、社交链接与 AI 对话界面 (阿里通义 | 1752点数解答 | 2024-10-28 23:32:45)316
- C++ 完整代码:实现书籍信息录入与列表管理(GPT | 2245点数解答 | 2024-12-18 09:06:13)328
- C++ 实现:自由定制,开启独特棋类游戏设计之旅!(字节豆包 | 1441点数解答 | 2025-12-28 15:02:52)131
- C++ 实现:自由定制,打造专属棋类游戏盛宴!(字节豆包 | 2307点数解答 | 2025-12-28 15:04:23)125
- C++实现:自由定制的多元棋类游戏,规则齐全玩法多样!(字节豆包 | 2601点数解答 | 2025-12-28 15:12:21)111
- Python知识大挑战:10 道题揭秘编程关键要点与答案(字节豆包 | 296点数解答 | 2024-10-20 19:31:00)288