给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。

序号代表了一个元素有多大。序号编号的规则如下:

  • 序号从 1 开始编号。
  • 一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。
  • 每个数字的序号都应该尽可能地小。

示例 1:

输入:arr = [40,10,20,30]
输出:[4,1,2,3]
解释:40 是最大的元素。 10 是最小的元素。 20 是第二小的数字。 30 是第三小的数字。

示例 2:

输入:arr = [100,100,100]
输出:[1,1,1]
解释:所有元素有相同的序号。

示例 3:

输入:arr = [37,12,28,9,100,56,80,5,12]
输出:[5,3,4,2,8,6,7,1,3]

提示:

  • 0 <= arr.length <= 105
  • -10^ 9 <= arr[i] <= 10^9

Code:

常规超时思路

class Solution {
public:
vector<int> arrayRankTransform(vector<int>& arr) {
if(arr.size()==0)
return arr;
vector<int>arrsrc=arr;
sort(arr.begin(),arr.end()); typedef struct
{
int num;
int index;
}param; vector<param>vec;
vector<int>res; int cnt=1;
param p;
p.num=arr[0];
p.index=cnt;
vec.push_back(p); map<int,param>mymap; for(int i=1;i<arr.size();i++)
{ param p;
p.num=arr[i];
if(arr[i]==arr[i-1])
{
p.index=cnt;
}
else
p.index=++cnt;
vec.push_back(p); } for(int i=0;i<arrsrc.size();i++)
{ for(int j=0;j<vec.size();j++)
{
if(vec[j].num==arrsrc[i])
{
res.push_back(vec[j].index);
break;
}
}
// res.push_back();
}
return res; }
};

终极大法:利用map解决时间问题

Code:

class Solution {
public:
vector<int> arrayRankTransform(vector<int>& arr) {
vector<int>arrsrc=arr;
sort(arr.begin(),arr.end()); typedef struct
{
int num;
int index;
}param; vector<param>vec;
vector<int>res; if(arr.size()==0)
return res; int cnt=1;
param p;
p.num=arr[0];
p.index=cnt;
vec.push_back(p);
map<int,param>mymap;
mymap[arr[0]]=p;
for(int i=1;i<arr.size();i++)
{ param p;
p.num=arr[i];
if(arr[i]==arr[i-1])
{
p.index=cnt;
}
else
p.index=++cnt;
vec.push_back(p); mymap[arr[i]]=p; } for(int i=0;i<arrsrc.size();i++)
{
res.push_back(mymap[arrsrc[i]].index);
}
return res; }
};

Leetcode 1331. 数组序号转换的更多相关文章

  1. LeetCode 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树

    第108题 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10 ...

  2. php数组编码转换函数的示例

    场景说明/问题描述: Ajax提交页面编码为gb2312,数据库编码为utf8,在不更改页面及数据库编码的情况下插入数据. 自定义函数:  代码如下 复制代码 function array_iconv ...

  3. qt 字符数组如何转换字符串?

    char 字符数组如何转换成 QString? char source{1024} = {0}; QString des = QString::fromLocal8Bit(source);

  4. Javascript数组系列四之数组的转换与排序Sort方法

    今天我们继续来介绍 Javascirpt 数组中的方法,也是数组系列的第四篇文章,因为数组的方法众多,每篇文章我们都对数组的每个方法都有比较细致的描述,只要你能够从中成长一点点,那我们的目的就达到了, ...

  5. 集合 数组 定义 转换 遍历 Arrays API MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. LeetCode:数组中的第K个最大元素【215】

    LeetCode:数组中的第K个最大元素[215] 题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: ...

  7. C#结构体和字节数组的转换函数

    在通信过程中,一般我们都会操作到字节数组.特别是希望在不同语言编程进行操作的时候. 虽然C#提供了序列化的支持,不用字节数组也行.但操作字节数组肯定会碰到.   一般都会采用结构来表示字节数组.但结构 ...

  8. 图片和base64编码字符串 互相转换,图片和byte数组互相转换

    图片和base64编码字符串 互相转换 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; ...

  9. 数组/矩阵转换成Image类

    Python下将数组/矩阵转换成Image类 原创 2017年04月21日 19:21:27 标签: python / 图像处理 3596 先说明一下为什么要将数组转换成Image类.我处理的图像是F ...

随机推荐

  1. 单列集合(Collection-List)

    与数组的区别 ArrayList while循环快捷键itit 遍历方法2:增强for循环 快捷键大写的I List接口(少部分常用的) List三种遍历方式 注意事项 ArrrayList底层结构和 ...

  2. Lab_1:练习1——理解通过make生成执行文件的过程

    lab_0 清华大学ucore实验环境配置详细步骤!(小白入) lab_1 清华大学ucore bootload启动ucore os(预备知识) Lab_1:练习1--理解通过make生成执行文件的过 ...

  3. Tomcat配置安装

    1.tomcat是什么? 是由JAVA开发的开源且免费,主要是用于web服务器,是中间件.主要用于中小型企业 2.tomcat安装 安装jdk,可以rpm或者官网安装,安装完配置java环境变量,打开 ...

  4. scanf需要多输入一行是什么问题

    有大佬知道用scanf输入,执行程序要多输入一行才能运行一般是什么问题呢 scanf的问题,其中多了\n. scanf如果加入\n,会导致需要多输入一次数据. 错误实例:

  5. 3.0 vue以构造函数形式返回数据

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

  6. Java高并发-无锁

    一.无锁类的原理 1.1 CAS CAS算法的过程是这样:它包含3个参数CAS(V,E,N).V表示要更新的变量,E表示预期值,N表示新值.仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同, ...

  7. mui|mui.plusReady里面的函数不执行??

    无论是在本地的浏览器还是在iPhone上真机运行都出现奇怪的错误,比如说子页面样式成为乱码,无法跳转子页面等等,一开始并没有意识到是mui.plusReady的问题,后来调试时发现是plusReady ...

  8. Seata源码分析(一). AT模式底层实现

    目录 GlobalTransactionScanner 继承AbstractAutoProxyCreator 实现InitializingBean接口 写在最后 以AT为例,我们使用Seata时只需要 ...

  9. IOU->GIOU->CIOU->Focal_loss

    IOU->GIOU->CIOU->Focal_loss 参考b站 总览 2022-1-3号补充 该链接下关于算是函数讨论 https://zhuanlan.zhihu.com/p/1 ...

  10. JavaSE_关键字 接口 代码块 枚举

    1 Java中的关键字 1.1 static关键字 static特点 : 静态成员被所在类的所有对象共享 随着类的加载而加载 , 优先于对象存在 可以通过对象调用 , 也可以通过类名调用 , 建议使用 ...