C++开发:用优先队列快速求数组中各数右边首个更大数及代码实现
这个问题可以通过使用优先队列(堆)来解决。我们可以使用一个小顶堆来存储数组中的每个元素,同时记录下每个元素的索引。当我们遍历数组时,我们可以在堆中插入当前元素。然后,我们弹出堆顶元素,直到堆顶元素大于当前元素。堆顶元素就是当前元素右边第一个比其大的数。 以下是相应的C++代码: ```cpp #include <iostream> #include <queue> #include <vector> std::vector<int> nextGreaterElement(const std::vector<int>& nums) { std::vector<int> result(nums.size()); std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap; for (int num : nums) { minHeap.push(num); while (!minHeap.empty() && minHeap.top() < num) { result[minHeap.top()] = num; minHeap.pop(); } } return result; } int main() { std::vector<int> nums = {4, 2, 3, 1, 5}; std::vector<int> result = nextGreaterElement(nums); for (int num : result) { std::cout << num << " "; } return 0; } ``` 这个程序的时间复杂度是O(n log n),其中n是数组的长度。这是因为我们需要对每个元素进行一次插入和一次弹出操作,每次操作的时间复杂度都是O(log n)。空间复杂度是O(n),因为我们需要存储所有的元素。 ######[AI写代码神器 | 325点数解答 | 2023-11-09 00:50:17]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)345
- C#工程师必知:数组、链表、哈希、队列、栈数据结构优缺点大揭秘! (百度文心 | 561点数解答 | 2023-11-09 17:56:30)264
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)16
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)314
- 揭秘!十进制整数转其他进制用啥存储结构最合适?答案竟是它!(字节豆包 | 57点数解答 | 2024-11-13 01:21:11)236
- Java 实现仿 Windows 资源管理器:文件管理器功能全解析与代码示例(字节豆包 | 623点数解答 | 2025-01-01 14:59:04)250
- 用队列操作算法模拟周末舞会舞伴配对问题及代码实现(DeepSeek | 601点数解答 | 2025-05-18 11:27:45)184
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)465
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)356
- 超详细:实现LED灯中速→慢速→快速循环闪烁及特定顺序闪烁的程序修改方案(字节豆包 | 865点数解答 | 2024-10-20 21:13:53)247
- DSP2833x:实现D14、D12、D10 LED按中速→慢速→快速顺序循环闪烁的代码优化(阿里通义 | 1309点数解答 | 2024-10-20 21:14:18)252
- 修改 DSP2833x 程序:实现 LED 灯中速→慢速→快速闪烁及特定顺序循环闪烁 (GPT | 1312点数解答 | 2024-10-20 21:14:21)272