Skip to content

Commit 6b6f3ef

Browse files
committed
add: 队列中可以看到的人数
1 parent 5241b54 commit 6b6f3ef

5 files changed

+57
-1
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,10 @@ C++标准库提供的数据结构实在是太多了,参考[C++标准库头文
417417

418418
###
419419

420+
- [队列中可以看到的人数](src/stack/number_of_visible_people_in_a_queue.cpp) [栈, 数组, 单调栈]
421+
422+
- LeetCode 1944. 队列中可以看到的人数 <https://leetcode.cn/problems/number-of-visible-people-in-a-queue>
423+
420424
- [从链表中移除节点](src/stack/remove_nodes_from_linked_list.cpp) [栈, 递归, 链表, 单调栈]
421425

422426
- LeetCode 2487. 从链表中移除节点 <https://leetcode.cn/problems/remove-nodes-from-linked-list>
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// 队列中可以看到的人数
2+
// https://leetcode.cn/problems/number-of-visible-people-in-a-queue
3+
// INLINE ../../images/stack/number_of_visible_people_in_a_queue.jpeg
4+
5+
#include <headers.hpp>
6+
7+
class Solution {
8+
public:
9+
vector<int> canSeePersonsCount(vector<int> &heights) {
10+
int n = heights.size();
11+
vector<int> res(n, 0);
12+
vector<int> stack;
13+
14+
for (int i = n - 1; i >= 0; i--) {
15+
int h = heights[i];
16+
while (!stack.empty() && stack.back() < h) {
17+
stack.pop_back();
18+
res[i] += 1;
19+
}
20+
if (!stack.empty()) {
21+
res[i] += 1;
22+
}
23+
stack.push_back(h);
24+
}
25+
return res;
26+
}
27+
};

test/lib/lib_test.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// 执行编译时间:2024-01-04 09:37:38
1+
// 执行编译时间:2024-01-05 14:42:19
22
#include <gtest/gtest.h>
33
#include <lib.hpp>
44

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include <stack/number_of_visible_people_in_a_queue.cpp>
2+
3+
TEST(队列中可以看到的人数, canSeePersonsCount) {
4+
Solution solution;
5+
// 示例 1:
6+
// 输入:heights = [10,6,8,5,11,9]
7+
// 输出:[3,1,2,1,1,0]
8+
// 解释:
9+
// 第 0 个人能看到编号为 1 ,2 和 4 的人。
10+
// 第 1 个人能看到编号为 2 的人。
11+
// 第 2 个人能看到编号为 3 和 4 的人。
12+
// 第 3 个人能看到编号为 4 的人。
13+
// 第 4 个人能看到编号为 5 的人。
14+
// 第 5 个人谁也看不到因为他右边没人。
15+
vector heights = {10, 6, 8, 5, 11, 9};
16+
vector result = {3, 1, 2, 1, 1, 0};
17+
EXPECT_EQ(solution.canSeePersonsCount(heights), result);
18+
19+
// 示例 2:
20+
// 输入:heights = [5,1,2,3,10]
21+
// 输出:[4,1,1,1,0]
22+
vector heights2 = {5, 1, 2, 3, 10};
23+
vector result2 = {4, 1, 1, 1, 0};
24+
EXPECT_EQ(solution.canSeePersonsCount(heights2), result2);
25+
}

0 commit comments

Comments
 (0)