酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]