欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2191. 将杂乱无章的数字排序(自定义排序)

发布时间:2024/7/5 编程问答 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 LeetCode 2191. 将杂乱无章的数字排序(自定义排序) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个下标从 0 开始的整数数组 mapping ,它表示一个十进制数的映射规则,mapping[i] = j 表示这个规则下将数位 i 映射为数位 j 。

一个整数 映射后的值 为将原数字每一个数位 i (0 <= i <= 9)映射为 mapping[i] 。

另外给你一个整数数组 nums ,请你将数组 nums 中每个数按照它们映射后对应数字非递减顺序排序后返回。

注意:
如果两个数字映射后对应的数字大小相同,则将它们按照输入中的 相对顺序 排序。
nums 中的元素只有在排序的时候需要按照映射后的值进行比较,返回的值应该是输入的元素本身。

示例 1: 输入:mapping = [8,9,4,0,2,1,3,5,7,6], nums = [991,338,38] 输出:[338,38,991] 解释: 将数字 991 按照如下规则映射: 1. mapping[9] = 6 ,所有数位 9 都会变成 62. mapping[1] = 9 ,所有数位 1 都会变成 8 。 所以,991 映射的值为 669338 映射为 007 ,去掉前导 0 后得到 738 映射为 07 ,去掉前导 0 后得到 7 。 由于 33838 映射后的值相同,所以它们的前后顺序保留原数组中的相对位置关系,33838 的前面。 所以,排序后的数组为 [338,38,991] 。示例 2: 输入:mapping = [0,1,2,3,4,5,6,7,8,9], nums = [789,456,123] 输出:[123,456,789] 解释:789 映射为 789456 映射为 456123 映射为 123 。所以排序后数组为 [123,456,789] 。提示: mapping.length == 10 0 <= mapping[i] <= 9 mapping[i] 的值 互不相同 。 1 <= nums.length <= 3 * 10^4 0 <= nums[i] < 10^9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-the-jumbled-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 求出映射后的数字,和映射之前的 序号
  • 先按映射后的数字排序,一样的话按照之前的序号
class Solution { public:vector<int> sortJumbled(vector<int>& mapping, vector<int>& nums) {unordered_map<int,int> m;unordered_map<int, int> idx;for(int i = 0; i < nums.size(); ++i){int num = nums[i], ans = 0, p = 1;if(num==0)ans = mapping[0];while(num){ans += p*mapping[num%10];p *= 10;num /= 10;}m[nums[i]] = ans;idx[nums[i]] = i;}sort(nums.begin(), nums.end(),[&](auto a, auto b){if(m[a] != m[b])return m[a] < m[b];return idx[a] < idx[b];});return nums;} };

1072 ms 118.4 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

总结

以上是生活随笔为你收集整理的LeetCode 2191. 将杂乱无章的数字排序(自定义排序)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。