从前有很多小胖子,他们喜欢互相比谁更可爱,每一个小胖子都有一个“可爱数值”,有一天很多小胖子横着排成一行, 每一个小胖子都只能看见右边的人,小胖子们想知道自己看的见的人里面有多少个比自己可爱的人,你能帮帮可爱的小胖子们么?
时间: 2023-05-30 11:01:35 浏览: 158
思路:
我们可以从右往左遍历小胖子们,每一个小胖子都需要知道在他右边有多少个比他可爱的人,我们可以用一个变量来记录当前最大的可爱数值,然后在遍历的时候比较当前小胖子的可爱数值和当前最大的可爱数值,如果当前小胖子的可爱数值比当前最大的可爱数值大,那么他右边比他可爱的人数就是之前已经遍历过的小胖子们中比他可爱的人数的总和,否则他右边比他可爱的人数就是他右边一个小胖子的比他可爱的人数。
代码如下:
```
def find_cute_people(nums):
n = len(nums)
res = [0] * n
max_cute = 0
for i in range(n-1, -1, -1):
if nums[i] > max_cute:
max_cute = nums[i]
count = 0
for j in range(i+1, n):
if nums[j] > nums[i]:
count += 1
res[i] = count
else:
res[i] = res[i+1] + int(nums[i+1] > nums[i])
return res
```
测试代码如下:
```
nums = [5, 1, 3, 6, 4, 2]
print(find_cute_people(nums)) # [0, 3, 1, 0, 1, 0]
```
时间复杂度:$O(n^2)$。
阅读全文