博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode刷题笔记 1365. 有多少小于当前数字的数字
阅读量:3748 次
发布时间:2019-05-22

本文共 1346 字,大约阅读时间需要 4 分钟。

1365. 有多少小于当前数字的数字

知识点:数组、排序

时间:2020年10月26日
题目链接:

题目

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

提示

  1. 2 <= nums.length <= 500
  2. 0 <= nums[i] <= 100

解法

  1. 把数据和他的下标放入数组中
  2. 对数据按照大小排序,可以设置一个rank记录比他小的有几个
  3. 放入的地方是下标,值是rank,
  4. 注意值一样时,rank不增加,下一个rank根据下标可以得出

代码

#include 
#include
#include
using namespace std;class Solution {
public: vector
smallerNumbersThanCurrent(vector
& nums) {
vector
> tmp; vector
ans(nums.size(),0); for(int i = 0;i < nums.size();i++) tmp.push_back(pair
(nums[i],i)); sort(tmp.begin(), tmp.end()); int rank = -1; for(int i = 0;i < nums.size();i++){ if(i == 0 || tmp[i].first != tmp[i-1].first){ rank = i; } ans[tmp[i].second] = rank; } return ans; }};int main(){ vector
nums{ 6,5,4,8,6}; Solution s; vector
ans = s.smallerNumbersThanCurrent(nums); for(int x:ans) cout<
<

今天也是爱zz的一天哦!

转载地址:http://mmdsn.baihongyu.com/

你可能感兴趣的文章
51单片机介绍(二)
查看>>
STM32F103 入门篇-5-初识STM32
查看>>
后台框架的frameset
查看>>
Spring Jdbc
查看>>
Spring 事务管理
查看>>
spring与mybatis的整合
查看>>
json数据交换和RESTful支持
查看>>
spring中的拦截器
查看>>
文件上传和下载
查看>>
Oracle指令,软件架构,
查看>>
oracle5:oracle的图形界面操作,分页查询,练习
查看>>
密码学基础之对称密码体制和公钥密码体制
查看>>
Spark Streaming进阶
查看>>
C++顺序表经典算法
查看>>
网络安全与管理知识点总结
查看>>
YARN的概述
查看>>
企业级ansible(一)-----ansible的基础知识了解
查看>>
有关IP及IP设定方式 ,改造虚拟机做路由
查看>>
路由器的搭建虚拟机上网及DHCP服务、dns解析
查看>>
linux系统的定时、延迟任务管理
查看>>