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. bootstrap-table 实现父子表

    1.引入相关的css和js <link type="text/css" href="/components/bootstrap/3.3.7/css/bootstra ...

  2. Linux基础篇二:Bash shell(壳,命令解释器)介绍

    shell执行方式: 第一:输入命令  (简单工作) 第二:   脚本  (适合大量工作) Bash shell 实际上的叫法是  GNU/Bash    如何查询呢:  bash - version ...

  3. [LC] 1002. Find Common Characters

    Given an array A of strings made only from lowercase letters, return a list of all characters that s ...

  4. jsp页面链接文件

    Myeclipse中jsp页面链接css文件不生效问题 jsp页面在外链css文件后,样式表不生效,查了很多方法,都说是路径问题改了很多次也不行. 例如改为: <link rel="s ...

  5. EmguCV从位图(Bitmap)加载Image<Gray,byte>速度慢的问题

    先说背景.最近在用C#+EmguCV(其实就是用P/Invoke封闭了OpecCV,与OpenCVDotNet差不多) 做一个视频的东西.视频是由摄像头采集回来的1f/s,2048X1000大小,其实 ...

  6. [Windows] Windows API 串口通信

    Windows 中通过Windows API 进行串口通信主要有以下步骤: 打开串口 配置串口 读写串口 关闭串口 打开串口 关键API: CreateFile Windows 中进行设备的操作,第一 ...

  7. 统计学方法(PCA、ICA、RCA、LCA)

    ---------------------------------------------------------------------------------------------------- ...

  8. javaee验证码如何使用

    首先需要导入jar包 ValidateCode.jar 110   25  为验证码框的大小  4为验证码数目 9为干扰线条数 Servlet代码如下 运行截图如下

  9. 吴裕雄--天生自然python学习笔记:Python3 面向对象

    Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集 ...

  10. centos7 开机/etc/rc.local 不执行的问题(转载)

    最近发现centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了 #!/bin/bash # THIS FILE IS ADDE ...