You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python数组算法问题:实现统计每个元素的更小元素个数函数

解决统计数组中比当前元素小的元素数量问题

给定数组nums,需针对每个元素nums[i],统计数组中满足j≠i且nums[j] < nums[i]的有效下标j的数量。示例输入nums = [8,1,2,2,3],对应输出[4,0,1,1,3]。

你当前的代码存在两个核心问题:

  1. 嵌套循环顺序错误,导致最终生成的列表长度是n²而非n(n为数组长度);
  2. 试图用smth实现计数的思路逻辑不通,无法完成累加统计。

方案一:基础实现(直观易懂)

直接对每个元素,统计数组中小于它的元素总数即可——因为j=i时nums[j] < nums[i]不成立,无需额外排除j≠i的情况。

from typing import List

class Solution:
    def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
        # 对每个元素num,统计数组中小于num的元素个数
        return [sum(1 for x in nums if x < num) for num in nums]

比如针对示例中的num=8,生成器表达式会遍历数组并统计4个小于8的元素,最终返回对应计数。

方案二:优化时间复杂度(适合大数据量)

上述方案时间复杂度为O(n²),如果数组规模较大,可通过排序+二分查找将时间复杂度降至O(n log n):

from typing import List
import bisect

class Solution:
    def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
        sorted_nums = sorted(nums)
        # bisect_left返回num在排序数组中首次出现的索引,该索引值即为小于num的元素个数
        return [bisect.bisect_left(sorted_nums, num) for num in nums]

以示例为例,排序后的数组为[1,2,2,3,8],bisect_left(sorted_nums, 2)返回1,正好对应两个2各自的计数结果。

内容的提问来源于stack exchange,提问作者Herzeg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:50:25