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

题目大意:给你一个数组nums,对于其中每个元素nums[i],请你统计数组中比它小的所有数字的数目.也就是说,对于每个nums[i]你必须计算出有效的j的数量,其中j满足j != i 且 nums[j] < nums[i]. 以数组形式返回答案.

思路一:暴力法,对于每个nums[i], 统计数组中所有小于nums[i]的个数,时间复杂度$O(n^2)$.

C++代码:

 class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int len = nums.size();
vector<int> cnt(len, );
for (int index = ; index < len; ++index) {
for (int i = ; i < len; ++i) {
if (i != index && nums[i] < nums[index])
cnt[index]++;
}
}
return cnt;
}
};

python3代码:

思路二:由于数组中的数属于[0,100], 可以利用计数排序的方式,先将数组排好序。

C++代码:时间复杂度$O(n)$

class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> cnt(, );
for (int i = ; i < nums.size(); ++i) {//计数, cnt[i]此时统计的是数组中数i的个数
cnt[nums[i]]++;
}
for (int i = ; i < ; ++i) {//cnt[i]统计的是数组中小于等于数i的个数
cnt[i] += cnt[i - ];
}
vector<int> ans(nums.size(), );
for (int i = ; i < nums.size(); ++i) {
//如果nums[i] == 0, 说明数组中小于0的个数为0,否则小于nums[i]的个数为cnt[nums[i] - 1];
ans[i] = (nums[i] == ? : cnt[nums[i] - ]);
}
return ans;
}
};

python3代码:

时间复杂度O(nlogn)

class Solution:
def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
indics = {}
for index, num in enumerate(sorted(nums)):
indics.setdefault(num, index)
return [indics[num] for num in nums]

时间复杂度O(n):

class Solution:
def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
count = collections.Counter(nums) for i in range(,):
count[i] += count[i-] return [count[x-] for x in nums]

leetcode 1365. How Many Numbers Are Smaller Than the Current Number的更多相关文章

  1. LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters

    LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCod ...

  2. LeetCode:1. Add Two Numbers

    题目: LeetCode:1. Add Two Numbers 描述: Given an array of integers, return indices of the two numbers su ...

  3. [LeetCode] 445. Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  4. 【LeetCode】386. Lexicographical Numbers 解题报告(Python)

    [LeetCode]386. Lexicographical Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...

  5. leetcode@ [263/264] Ugly Numbers & Ugly Number II

    https://leetcode.com/problems/ugly-number/ Write a program to check whether a given number is an ugl ...

  6. [LeetCode] Bitwise AND of Numbers Range 数字范围位相与

    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...

  7. LeetCode 2 Add Two Numbers 模拟,读题 难度:0

    https://leetcode.com/problems/add-two-numbers/ You are given two linked lists representing two non-n ...

  8. LeetCode 2 Add Two Numbers(链表操作)

    题目来源:https://leetcode.com/problems/add-two-numbers/ You are given two linked lists representing two ...

  9. [leetCode][016] Add Two Numbers

    [题目]: You are given two linked lists representing two non-negative numbers. The digits are stored in ...

随机推荐

  1. voxelmorph配置

    简介 VoxelMorph使用CNN实现了非监督的医学图像配准,速度较之前的方法有很大提升.主要特点有: 提出了一种基于学习的解决方案,不需要在训练过程中获取诸如ground truth对应或解剖标志 ...

  2. 编译原理_P1004

    龙书相关知识点总结 //*************************引论***********************************// 1. 编译器(compiler):从一中语言( ...

  3. Pwn-Gcc编译命令

  4. D. Welfare State

    There is a country with 

  5. centos7 ModuleNotFoundError: No module named 'users'

    centos7下运行django项目时ModuleNotFoundError: No module named 'users' 由于我的项目目录是下面这样: 因为找不到users的路径 所以在mana ...

  6. Robustness|Variability|Diversification|Complexity|自组装|

    生命组学 进化方向有以下四个特性:Robustness:变稳定,比如杀虫剂最大浓度也有杀不死的虫子.Variability易变性与Diversification多样性,容易变多和变多.Complexi ...

  7. RabbitMQ传输原理、五种模式

    本文代码基于SpringBoot,文末有代码连接 .首先是一些在Spring Boot的一些配置和概念,然后跟随代码看下五种模式 MQ两种消息传输方式,点对点(代码中的简单传递模式),发布/订阅(代码 ...

  8. 使printf打印信息带有颜色

    #define NONE "\033[m"#define RED "\033[0;32;31m"#define LIGHT_RED "\033[1;3 ...

  9. 吴裕雄--天生自然HTML学习笔记:HTML <head>

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. JS数组与字符串相互转化

    <script type="text/javascript"> var obj="new1abcdefg".replace(/(.)(?=[^$]) ...