leetcode--python--1365

1365. 有多少小于当前数字的数字

给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。

换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。

以数组形式返回答案
限制:2 <= nums.length <= 500;0 <= nums[i] <= 100

class Solution(object):
    def smallerNumbersThanCurrent(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        result = []
        nums_less = []
        n = 0
        nums_tem = [0] * 101
        for i in nums:
            nums_tem[i] += 1
        for j in nums_tem:
            nums_less.append(n)
            n += nums_tem[j]
        for k in nums:
            result.append(nums_less[k])
        return(result)

leetcode--python--1365

所用的方法为计数排序,也是第一次听说这个东西,总体的计算方法如下:

  • 首先初始化一个长度为101的数组nums_tem,各个位置都是0(用来临时存放nums中的元素的出现次数,可能这就是计数排序中的计数的意思吧)
  • 然后遍历nums,出现哪个数就在nums_tem对应位置+1(计数),这样就得到我们需要的临时计数数组(临时数组nums_tem的下标对应着nums中的元素,下标上的数字对应下标在nums中出现的次数)
  • 之后,我们初始化另外一个空数组nums_less (用来存放nums中小于某个数的次数)
  • 最后遍历nums,输出对应结果
上一篇:辗转相除法求最大公约数


下一篇:和为S的两个数字 --剑指offer