菜鳥扣程式碼第十五天:leetcode第1365題--有多少小於當前數字的數字

小刁-99發表於2020-11-20

題目描述:

給你一個陣列 nums,對於其中每個元素 nums[i],請你統計陣列中比它小的所有數字的數目。

換而言之,對於每個 nums[i] 你必須計算出有效的 j 的數量,其中 j 滿足 j != i 且 nums[j] < nums[i] 。

以陣列形式返回答案。

示例 1:

輸入:nums = [8,1,2,2,3]
輸出:[4,0,1,1,3]
解釋:
對於 nums[0]=8 存在四個比它小的數字:(1,2,2 和 3)。
對於 nums[1]=1 不存在比它小的數字。
對於 nums[2]=2 存在一個比它小的數字:(1)。
對於 nums[3]=2 存在一個比它小的數字:(1)。
對於 nums[4]=3 存在三個比它小的數字:(1,2 和 2)。
示例 2:

輸入:nums = [6,5,4,8]
輸出:[2,1,0,3]
示例 3:

輸入:nums = [7,7,7,7]
輸出:[0,0,0,0]

程式碼:

class Solution(object):
    def smallerNumbersThanCurrent(self, nums):
        res = []
        tmp_nums = list(nums)
        tmp_nums.sort()
        for num in nums:
            res.append(tmp_nums.index(num))
        return res

測試:

輸入
[2,2,5,8,3,1]
輸出
[1,1,4,5,3,0]
預期結果
[1,1,4,5,3,0]

解題思路:

如果直接將列表中第i個數字挨個與其餘i-1個進行比較,程式碼的效率會比較低,因為輸出的是比第i個數字小的數字的個數,所以很容易想到先將列表中的數字進行排序(升序),然後再輸出比當前數字小的數字的個數,這樣程式碼的效率會比較高。python正好有sort()方法,預設可將列表中的數字正序排序。

相關文章