返回
从Offer导出的LeetCode题:挑战1944,让你对数据统计有更深的了解
后端
2023-10-21 10:03:51
前言
Offer是众多技术面试者都会选择的一款题目,它以其独有的技术面试问题设计,帮助面试者迅速了解LeetCode的解题思路,为技术面试做好充分的准备。掘友们可以利用2022春招系列活动-刷题打卡任务的机会,积极参与LeetCode的刷题打卡,通过完成不同难度的LeetCode题目,快速提升自己的技术水平,为未来的技术面试做好充分的准备。
任务挑战:
题目:
问题
给定一排人的身高,求每个人往右边看过去,能看到多少人? 能看到对方,当且仅当两个人中间的所有人都比这两个更矮。
示例:
输入:[1, 2, 3, 4, 5]
输出:[0, 1, 2, 3, 4]
解释:
第五个人可以看到前面四个人。
第四个人可以看到前面三个人。
第三个人可以看到前面两个人。
第二个人可以看到前面一个人。
第一个人看不到任何人。
提示:
- 1 <= heights.length <= 100
- 1 <= heights[i] <= 100
解题思路:
这道题可以用动态规划来解决。我们可以定义一个数组dp,其中dp[i]表示第i个人能看到的人数。我们从左到右遍历数组,对于第i个人,我们比较他与前面所有人的身高,如果前面某个人的身高比他高,那么第i个人就不能看到他,否则第i个人可以看到他。这样,我们就可以得到dp[i]的值。
Python代码:
def count_visible_people(heights):
"""
求每个人往右边看过去,能看到多少人。
参数:
heights: 一排人的身高,是一个整数列表。
返回:
一个整数列表,表示每个人能看到的人数。
"""
# 定义一个数组dp,其中dp[i]表示第i个人能看到的人数
dp = [0] * len(heights)
# 从左到右遍历数组
for i in range(1, len(heights)):
# 比较第i个人与前面所有人的身高
for j in range(i):
# 如果前面某个人的身高比他高,那么第i个人就不能看到他
if heights[j] >= heights[i]:
break
# 否则,第i个人可以看到他
dp[i] += 1
# 返回dp数组
return dp
# 测试
heights = [1, 2, 3, 4, 5]
print(count_visible_people(heights))
输出:
[0, 1, 2, 3, 4]