题目地址:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/
这一题可以很巧妙地使用计数排序来求出来;
做题思路:
1.既然是计数排序那要先遍历一遍数组, 把每个数字出现的次数 记录在一个新数组里面,下标为数字的大小
例如: 棕色为新建数组
数字每出现一次就加1
2.如果是排序的话,最后我们把计数数组里的数往外一个一个吐出来就可以了。
3.这个题我们不排序也无所谓,它只需要所有比这个数小的数字的个数,也就是刚才的计数数组里,当前位置(表示对应的nums里的一个数n),之前的数(比n小的数字的个数)的总和
class Solution:
def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
place = [0] * 101 #定义一个计数数组
output = [] # 最终输出的数组
for n in nums:
place[n] += 1 # 把从0 - 100的所有数的个数都数出来了。
lessthan = [] # 把从0 - 100的所有数的比它小的数的个数都列出来。
temp = 0 # 其实就是刚才的place数组的累加
for p in place:
lessthan.append(temp)
temp += p
for n in nums: # 最后对应nums把lessthan的值掏出来作为输出。
output.append(lessthan[n])
return output