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. pycharm、Django+node.js、vue搭建web项目

    参考文章:https://www.wandouip.com/t5i35466/  在此感谢 本篇接着上一篇:windows10使用npm安装vue.vue-cli 首先Django项目是搭建好的,就是 ...

  2. SpringMVC配置讲解(一)

    SpringMVC 核心类和接口 DispatcherServlet   -- 前置控制器 在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[s ...

  3. poj-2828 Buy Tickets(线段树,排队问题,逆向思维)

    题目地址:POJ 2828 Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Yea ...

  4. 创建可执行jar包

    1.编辑manifest.mf文件 Main-Class:空格 你的类名 回车 2.打包 jar cvfm 类名.jar manifest.mf 类名.class 3使用 java -jar 类名.j ...

  5. 吴裕雄--天生自然C语言开发:数组

    ] = {1000.0, 2.0, 3.4, 7.0, 50.0}; ]; #include <stdio.h> int main () { ]; /* n 是一个包含 10 个整数的数组 ...

  6. day40-进程-生产者消费者模型进阶

    #1.队列的数据是安全的,因为队列内置了一把锁,大家都来抢占资源的时候,A在操作数据的时候,B就无法操作该数据. # 下面代码有两个生产者和三个消费者,包子吃完之后,接着放的两个None被marry和 ...

  7. bwa index|amb|ann|bwt|pac|sa

    -.gapcloser.fa | > t1.fa bwa index -a bwtsw -p t1 t1.fa >t1.bwa_index.log >& #$ ll #tot ...

  8. 01-电子商城项目介绍及ssm框架搭建

    1.B2C电商项目功能及架构 1.1功能列表 1.2系统架构(soa架构) 2.后台管理系统工程搭建及测试 ypMall,ypMall-manager-web ypMall为父项目,管理子项目的jar ...

  9. linux环境下卸载mysql

    第一种使用yum安装的mysql,使用如下命令进行卸载(不能确定使用何种方式安装的mysql情况下,按后续步骤一一进行处理即可): # yum remove mysql mysql-server my ...

  10. Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/5093566007214080

    解决办法: 两个方案:1.注册处理函数时,用如下方式,明确声明为不是被动的window.addEventListener('touchmove', func, { passive: false }) ...