LeetCode Contest 178-1365. 有多少小于当前数字的数字 How Many Numbers Are Smaller Than the Current Number

简介: LeetCode Contest 178-1365. 有多少小于当前数字的数字 How Many Numbers Are Smaller Than the Current Number

LeetCode Contest 178-1365. 有多少小于当前数字的数字 How Many Numbers Are Smaller Than the Current Number


Table of Contents

一、中文版

二、英文版

三、My answer

四、解题报告

一、中文版

给你一个数组 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]

 

提示:

2 <= nums.length <= 500

0 <= nums[i] <= 100

二、英文版

Given the array nums, for each nums[i] find out how many numbers in the array are smaller than it. That is, for each nums[i] you have to count the number of valid j's such that j != i and nums[j] < nums[i].
Return the answer in an array.
Example 1:
Input: nums = [8,1,2,2,3]
Output: [4,0,1,1,3]
Explanation:  
For nums[0]=8 there exist four smaller numbers than it (1, 2, 2 and 3).  
For nums[1]=1 does not exist any smaller number than it.
For nums[2]=2 there exist one smaller number than it (1).  
For nums[3]=2 there exist one smaller number than it (1).  
For nums[4]=3 there exist three smaller numbers than it (1, 2 and 2).
Example 2:
Input: nums = [6,5,4,8]
Output: [2,1,0,3]
Example 3:
Input: nums = [7,7,7,7]
Output: [0,0,0,0]
Constraints:
2 <= nums.length <= 500
0 <= nums[i] <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

三、My answer

# version 1
class Solution:
    def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
        res = []
        for i in range(len(nums)):
            count = 0
            for j in range(len(nums)):                
                if nums[j] < nums[i]:
                    count += 1
            res.append(count)
        return res
# version 2
class Solution:
    def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
        # 复制 nums 到 nums1 有两个方法
        # nums1 = [x for x in nums]  # 方法1
        nums1 = copy.deepcopy(nums) # 方法2
        nums1.sort() # 排序之后,数字的下标就是有多少数字小于它
        res = []
        for num in nums:
            res.append(nums1.index(num))
        return res

四、解题报告

Version 1 是暴力解法,因为此题中暴力解法时间复杂度 O(n^2) 不会超时,所以可用。

Version 2 更巧妙一点,复制数组之后给新数组排序,排序的时间复杂度为 O(nlogn),再遍历一遍数组,复杂度为O(n),所以整体时间复杂度为 O(nlogn)。

此方法有两个内置函数:

copy.deepcopy(nums) 硬拷贝 (浅拷贝是 nums.copy())

nums.index(num) 返回数字出现的第一个位置

相关文章
|
6月前
|
Go
golang力扣leetcode 713.乘积小于K的子数组
golang力扣leetcode 713.乘积小于K的子数组
42 0
【力扣每日一题】1365. 有多少小于当前数字的数字
【力扣每日一题】1365. 有多少小于当前数字的数字
|
算法
Leetcode 313. Super Ugly Number
题目翻译成中文是『超级丑数』,啥叫丑数?丑数就是素因子只有2,3,5的数,7 14 21不是丑数,因为他们都有7这个素数。 这里的超级丑数只是对丑数的一个扩展,超级丑数的素因子不再仅限于2 3 5,而是由题目给定一个素数数组。与朴素丑数算法相比,只是将素因子变了而已,解法还是和朴素丑数一致的。
99 1
|
5月前
|
存储 SQL 算法
LeetCode 题目 65:有效数字(Valid Number)【python】
LeetCode 题目 65:有效数字(Valid Number)【python】
|
6月前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
44 0
|
11月前
|
Java
2824. 统计和小于目标的下标对数目 --力扣 --JAVA
给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你返回满足 0 <= i < j < n 且 nums[i] + nums[j] < target 的下标对 (i, j) 的数目。
51 0
|
存储
Leetcode Single Number II (面试题推荐)
给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。
39 0
|
存储 C++ Python
LeetCode刷题---Add Two Numbers(一)
LeetCode刷题---Add Two Numbers(一)
|
存储 算法 安全
LeetCode - #2 Add Two Numbers
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
LeetCode - #2 Add Two Numbers