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. 吴裕雄--天生自然C语言开发:共同体

    union [union tag] { member definition; member definition; ... member definition; } [one or more unio ...

  2. hessian学习笔记

    一.hessian是什么 Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC ...

  3. php测试使用小的mysql存储过程

    <?php //前提是php.ini里面要开通mysqli的扩展./*$link = mysqli_connect('localhost','root','','chinatupai');  $ ...

  4. JavaScript 简介与语法

    一.JavaScript简介 ).head里面 ).body里面 (在body内最为严谨) ).</html>之后 //程序上来要执行的部分 [2]三个常用对话框 alert()警告对话框 ...

  5. JavaScript 事件代理

    转自:http://www.cnblogs.com/silence516/archive/2009/09/03/delegateEvent.html 如果你想给网页添加点JavaScript的交互性, ...

  6. 关于unicode汉字范围正则表达式的写法

    \u2E80-\u2EFF:CJK部首补充: \u2F00-\u2FDF:康熙部首: \u3000-\u303F:CJK标点符号: \u31C0-\u31EF:CJK笔划: \u3200-\u32FF ...

  7. C语言学习笔记之动态分配数组空间

    本文为原创文章,转载请标明出处 高级语言写多了,再拿起C语言的时候,自己已经傻了... C语言中数组大小不能为变量,即使这个变量已经被赋过值了,应该使用malloc方法进行数组空间动态分配. 如下: ...

  8. gitlab两种连接方式:ssh和http对比

    共同点: 都可以使用git clone 地址 .将项目下载到本地. 不同点: 当将本地修改上传到远程服务器时,http需要输入用户名密码,ssh. 1.ssh方式: 这是一种相对安全的方式这要求将本地 ...

  9. Time Machine 备份mac系统

    USB外接移动硬盘的方式来熟悉Time Machine,体会它带给我们的便利.O(∩_∩)O~~通过USB连接移动硬盘到MacBook Pro,如图所示 2 将移动硬盘连接到 Mac 时,系统有时会询 ...

  10. Luogu1681_ 最大正方形II

    题目背景 忙完了学校的事,v神终于可以做他的"正事":陪女朋友散步.一天,他和女朋友走着走着,不知不觉就来到了一个千里无烟的地方.v神正要往回走,如发现了一块牌子,牌子上有有一行小 ...