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

C++实现收集雪花问题,找出最大包裹大小

### 🍃思路分析 本题要求找出每种雪花最多有2片的最大包裹大小。可以使用滑动窗口的方法来解决这个问题。通过维护一个滑动窗口,窗口内每种雪花的数量不超过2片,不断更新窗口的大小以找到最大的窗口长度。 ### 💻代码实现 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int T; cin >> T; while (T--) { int n; cin >> n; vector<int> snowflakes(n); for (int i = 0; i < n; ++i) { cin >> snowflakes[i]; } vector<int> count(10001, 0); // 用于记录每种雪花的数量 int left = 0, maxSize = 0; for (int right = 0; right < n; ++right) { int currentSnowflake = snowflakes[right]; count[currentSnowflake]++; // 当当前雪花数量超过2片时,移动左指针 while (count[currentSnowflake] > 2) { count[snowflakes[left]]--; left++; } // 更新最大包裹大小 maxSize = max(maxSize, right - left + 1); } cout << maxSize << endl; } return 0; } ``` ### 📝代码解释 1. **输入处理**:首先读取测试数据的组数 `T`,对于每组数据,读取雪花的总数 `n` 和每片雪花的标记。 2. **滑动窗口**:使用两个指针 `left` 和 `right` 来维护一个滑动窗口。`right` 指针不断向右移动,将新的雪花加入窗口。当窗口内某种雪花的数量超过2片时,移动 `left` 指针,将窗口左侧的雪花移除,直到该种雪花的数量不超过2片。 3. **更新最大包裹大小**:在每次移动 `right` 指针后,更新最大包裹大小 `maxSize`。 ### ⚙️复杂度分析 - **时间复杂度**:$O(T * n)$,其中 $T$ 是测试数据的组数,$n$ 是每组数据中雪花的数量。 - **空间复杂度**:$O(1)$,因为 `count` 数组的大小是固定的,为 $10001$。 ### 🚀开发建议 - **边界条件处理**:在实际开发中,要注意输入数据的边界条件,如 `n` 的范围和雪花标记的范围。 - **代码可读性**:使用有意义的变量名和注释,提高代码的可读性。 - **性能优化**:可以考虑使用更高效的数据结构来优化代码性能,如哈希表。 ######[AI写代码神器 | 664点数解答 | 2026-06-07 15:13:58]

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