n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为 O(n) C++代码实现
时间: 2024-09-22 17:01:47 浏览: 7
为了在一个包含n个整数的无序数组中找到每个元素后面的第一个比它大的数,你可以使用双指针法。这个算法遍历一次数组,并维护两个指针,一个指向当前元素,另一个指向下一个位置。如果当前位置的值小于后面的值,就更新结果。
以下是使用C++实现的时间复杂度为O(n)的代码:
```cpp
#include <vector>
using namespace std;
void findNextLargerNumber(vector<int>& nums) {
int i = 0;
for (int j = 1; j < nums.size(); ++j) {
if (nums[j] > nums[i]) {
// 更新结果
nums[i] = nums[j];
// 移动左边界指针,寻找更大的元素
while (i < j && nums[i] <= nums[j - 1]) {
i++;
}
}
}
// 如果有未处理的最后一个元素,它可能是最大的,将其设为-1或其他特殊标记
if (i != nums.size()) {
nums[nums.size() - 1] = -1; // 使用一个特定值表示找不到更大的数
}
}
// 示例
int main() {
vector<int> nums = {8, 4, 2, 9, 6, 1};
findNextLargerNumber(nums);
for (const auto &num : nums) {
cout << num << " ";
}
return 0;
}
```
当你运行此程序,它将输出每个元素后面的第一个大于它的数,如果没有找到,则输出-1(这里仅作为示例,实际应用中可能需要替换为其他合适的默认值)。注意,最后的元素可能没有找到符合条件的数字,所以会显示一个特殊的标记。