「携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情」
今天我们来做一下leetcode的每日一题
题目链接在这里 1331. 数组序号转换
题意
这是一道简单题,题目给了我们一个数组,想让我们按顺序输出 每个数字在数组的大小排名,最大是1,而且排名可以重复
例如 [100,100,100,3] 返回的就是 [1,1,1,2] 因为三个100是重复的,同时排在第一,3排在第二
思路
乍一看,肯定需要排序,但是如果对原数组排序的话,就失去了原来的数组顺序,所以需要另外拷贝一份数组数据并排序,记作sorted。
- 另外,如何记录数组的排名呢? 这需要借助到哈希表,再声明一个变量ind用于记录上一个元素的排名,初始化为1。
- 然后,就可以遍历sorted,因为需要对比元素和前一个是否相同,所以先将第一个元素排名为1的信息记录到哈希表中,再将ind++。
- 然后从第二个开始遍历,如果当前元素cur和上个元素相同的话,就将[cur,ind]记录到哈希表,如果不同就将[cur,++ind]记录到哈希表。
- 这样,当遍历完数组之后,我们就可以得到每个 元素和他的排名的映射了。
- 最后,再遍历原数组,从哈希表中找到每个元素的排名,并放到数组中输入即可。
代码实现
结束语
做过这道题之后,可以发现,很多简单的问题,第一眼就可以确定下来解题思路了。
如果有更好的分析思路,欢迎大家在评论区发表看法!⛄