【LeetCode每日一题】——1331.数组序号转换

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 排序

二【题目难度】

  • 简单

三【题目编号】

  • 1331.数组序号转换

四【题目描述】

  • 给你一个整数数组 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 < = a r r . l e n g t h < = 1 0 5 0 <= arr.length <= 10^5 0<=arr.length<=105
  • − 1 0 9 < = a r r [ i ] < = 1 0 9 -10^9 <= arr[i] <= 10^9 109<=arr[i]<=109

七【解题思路】

  • 利用排序+哈希
  • 首先复制一份原数组,然后对原数组从小到大排序
  • 然后对排序后的数组进行哈希,key为数组值,val为数组值对应的排序,这样就可以对数组值去重,且记录每个数组值对应的数组下标
  • 最后遍历复制的数组,对于每个元素我们取出其排序后的位置,设置为当前值
  • 最后返回复制的数组即可

八【时间频度】

  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn) n n n为传入的数组的长度
  • 空间复杂度: O ( n ) O(n) O(n) n n n为传入的数组的长度

九【代码实现】

  1. Java语言版
class Solution {public int[] arrayRankTransform(int[] arr) {int n = arr.length;int[] temp = new int[n];for(int i = 0;i < n;i++){temp[i] = arr[i];}Arrays.sort(arr);HashMap<Integer, Integer> map = new HashMap<>();for(int i = 0;i < n;i++){if(!map.containsKey(arr[i])){map.put(arr[i], map.size() + 1);}}for(int i = 0;i < n;i++){temp[i] = map.get(temp[i]);}return temp;}
}
  1. C语言版
typedef struct
{int key;int val;UT_hash_handle hh;
}HashItem;int cmp(const void *a, const void *b)
{return *(int *)a - *(int *)b;
}int* arrayRankTransform(int* arr, int arrSize, int* returnSize)
{int* sortArr = (int*)malloc(sizeof(int) * arrSize);int* res = (int*)malloc(sizeof(int) * arrSize);memcpy(sortArr, arr, sizeof(int) * arrSize);qsort(sortArr, arrSize, sizeof(int), cmp);HashItem *map = NULL;for(int i = 0;i < arrSize;i++){HashItem *temp = NULL;HASH_FIND_INT(map, &sortArr[i], temp);if(temp == NULL){temp = (HashItem *)malloc(sizeof(HashItem));temp->key = sortArr[i];temp->val = HASH_COUNT(map) + 1;HASH_ADD_INT(map, key, temp);}}for(int i = 0;i < arrSize;i++){HashItem *temp = NULL;HASH_FIND_INT(map, &arr[i], temp);res[i] = temp->val;}*returnSize = arrSize;HashItem *cur, *temp;HASH_ITER(hh, map, cur, temp){HASH_DEL(map, cur);free(cur);}free(sortArr);return res;
}
  1. Python语言版
class Solution:def arrayRankTransform(self, arr: List[int]) -> List[int]:n = len(arr)temp = [0] * nfor i in range(0, n):temp[i] = arr[i]arr.sort()map = {}for i in range(0, n):if arr[i] not in map:map[arr[i]] = len(map) + 1for i in range(0, n):temp[i] = map[temp[i]]return temp
  1. C++语言版
class Solution {
public:vector<int> arrayRankTransform(vector<int>& arr) {int n = arr.size();vector<int> temp = arr;sort(arr.begin(), arr.end());unordered_map<int, int> map;for(int i = 0;i < n;i++){if(!map.count(arr[i])){map[arr[i]] = map.size() + 1;}}for(int i = 0;i < n;i++){temp[i] = map[temp[i]];}return temp;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/70051.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023牛客暑期多校训练营9-B Semi-Puzzle: Brain Storm

2023牛客暑期多校训练营9-B Semi-Puzzle: Brain Storm https://ac.nowcoder.com/acm/contest/57363/B 文章目录 2023牛客暑期多校训练营9-B Semi-Puzzle: Brain Storm题意解题思路代码 题意 解题思路 欧拉定理 a b ≡ { a b % φ ( p ) g c d ( a , p ) 1 a b g c d ( a ,…

接口测试工具——Postman测试工具 Swagger接口测试+SpringBoot整合 JMeter高并发测试工具

目录 Postman测试工具接口测试工具swaggerKnife4j1.引入依赖2.配置3.常用注解4.接口测试 JMeter什么是JMeter?JMeter安装配置1.官网下载2.下载后解压3.汉语设置 JMeter的使用方法1.新建线程组2.设置参数3.添加取样器4.设置参数&#xff1a;协议&#xff0c;ip&#xff0c;端口…

代码审计-ASP.NET项目-未授权访问漏洞

代码审计必备知识点&#xff1a; 1、代码审计开始前准备&#xff1a; 环境搭建使用&#xff0c;工具插件安装使用&#xff0c;掌握各种漏洞原理及利用,代码开发类知识点。 2、代码审计前信息收集&#xff1a; 审计目标的程序名&#xff0c;版本&#xff0c;当前环境(系统,中间件…

图数据库_Neo4j学习cypher语言_使用CQL命令002_删除节点_删除属性_结果排序Order By---Neo4j图数据库工作笔记0006

然后我们再来看如何删除节点 可以看到首先 我们这里 比如我要删除张三 可以看到 match (n:student) where n.name = "张三" delete n 这样就是删除了student集合中,name是张三的节点 然后我们再来看 如何来删除关系 match (n:student)-[r]->(m:student) where…

Unity UI内存泄漏优化

项目一运行&#xff0c;占用的内存越来越多&#xff0c;不会释放&#xff0c;导致GC越来越频繁&#xff0c;越来越慢&#xff0c;这些都是为什么呢&#xff0c;今天从UI方面谈起。 首先让我们来聊聊什么是内存泄漏呢&#xff1f; 一般来讲内存泄漏就是指我们的应用向内存申请…

安装PaddleOCR-2.7.0版本-笔记

安装PaddleOCR-2.7.0版本-笔记 先安装conda和python版本 本机安装的conda 22.9.0 python2.9.12 paddle2.4.2 paddlepaddle-gpu2.4.2 cuda10.2 安装完后&#xff0c;测试生成的结果如下所示&#xff1a; 一、第一步先激活环境 conda activate base conda activate base二、第…

FastAPI入门

目录 FastAPI FastAPI 是什么 为什么要用 FastAPI FastAPI 入门 安装 用 FastAPI 写个接口 调试接口 创建快捷请求 保存为快捷请求 发送请求 总结 FastAPI FastAPI 是什么 什么是 FastAPI 呢&#xff1f; FastAPI 是 Python 的一个框架&#xff0c;如果要类比的话…

ReactNative进阶(三十四):ipa Archive 阶段报错error: Multiple commands produce问题修复及思考

文章目录 一、前言二、问题描述三、问题解决四、拓展阅读五、拓展阅读 一、前言 在应用RN开发跨平台APP阶段&#xff0c;从git中拉取项目&#xff0c;应用Jenkins进行组包时&#xff0c;发现最终生成的ipa安装包版本号始终与项目中设置的版本号不一致。 二、问题描述 经过仔…

C++11并发与多线程笔记(3)线程传参详解,detach()大坑,成员函数做线程函数

C11并发与多线程笔记&#xff08;3&#xff09;线程传参详解&#xff0c;detach 大坑&#xff0c;成员函数做线程函数 1、传递临时对象作为线程参数1.1 要避免的陷阱11.2 要避免的陷阱21.3 总结 2、临时对象作为线程参数2.1 线程id概念2.2 临时对象构造时机抓捕 3、传递类对象…

Mac OS minicom 无法设置921600问题

MacOS minicom 无法设置921600问题 介绍过程解决方案参考资料 介绍 minicom是Mac上一款非常好用的串口工具。本文假设你已经安装minicom&#xff0c;并且知道minicom的一般配置和使用方法。这是“MacOS minicom 无法设置921600”的解决问题记录。它在以下环境中设置成功&#…

flutter:webview_flutter的简单使用

前言 最近在研究如何在应用程序中嵌入Web视图&#xff0c;发现有两个库不错。 一个是官方维护、一个是第三方维护。因为没说特别的需求&#xff0c;就使用了官方库&#xff0c;实现一些简单功能是完全ok的 基本使用 官方文档 https://pub-web.flutter-io.cn/packages/webv…

ansible 修改远程主机nginx配置文件

安装ansible brew install ansible 或者 pip3 install ansible 添加远程主机 设置秘钥 mac登录远程主机 ssh -p 5700 root192.168.123.211 ssh localhost #设置双机信任 ssh-kyegen -t rsa #设置主机两边的ssh配置文件 vi /etc/ssh/sshd_config/ PermitRootL…