LeetCode 1054. 距离相等的条形码

【LetMeFly】1054.距离相等的条形码

力扣题目链接:https://leetcode.cn/problems/distant-barcodes/

在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]

请你重新排列这些条形码,使其中任意两个相邻的条形码不能相等。 你可以返回任何满足该要求的答案,此题保证存在答案。

示例 1:

输入:barcodes = [1,1,1,2,2,2]
输出:[2,1,2,1,2,1]

示例 2:

输入:barcodes = [1,1,1,1,2,2,3,3]
输出:[1,3,1,3,2,1,2,1]

提示:

  • 1 <= barcodes.length <= 10000
  • 1 <= barcodes[i] <= 10000

方法一:排序(思维 + 构造)

首先使用哈希表ma统计每个数出现的次数。

接着将原始数组barcodes中的元素按照他们在ma中出现的次数从大到小排序,出现次数相同的按照数字大小排序(小到大或大到小都可,这是为了保证相同的数排序后相邻)。

接着开辟一个长度为 l e n ( b a r c o d e s ) len(barcodes) len(barcodes)的答案数组ans,将排好序的barcodes中的元素依次放入ans的偶数下标 0 , 2 , 4 , . . . 0, 2, 4, ... 0,2,4,...,再依次放入ans的奇数下标 1 , 3 , 5 , . . . 1, 3, 5, ... 1,3,5,...即可。

题目保证有解,因此不会出现同一个数占据了所有偶数下标后还有剩余的情况

  • 时间复杂度 O ( l e n ( b a r c o d e s ) × log ⁡ l e n ( b a r c o d e s ) ) O(len(barcodes)\times \log len(barcodes)) O(len(barcodes)×loglen(barcodes))
  • 空间复杂度 O ( l e n ( b a r c o d e s ) ) O(len(barcodes)) O(len(barcodes))

AC代码

C++

class Solution {
    
    
public:
    vector<int> rearrangeBarcodes(vector<int>& barcodes) {
    
    
        unordered_map<int, int> ma;
        for (int t : barcodes) {
    
    
            ma[t]++;
        }
        sort(barcodes.begin(), barcodes.end(), [&](int a, int b) {
    
    
            return ma[a] != ma[b] ? ma[a] > ma[b] : a > b;
        });
        vector<int> ans(barcodes.size());
        for (int j = 0, k = 0; k < 2; k++) {
    
    
            for (int i = k; i < barcodes.size(); i += 2) {
    
    
                ans[i] = barcodes[j++];
            }
        }
        return ans;
    }
};

Python

# from typing import List
# from collections import defaultdict

class Solution:
    def rearrangeBarcodes(self, barcodes: List[int]) -> List[int]:
        ma = defaultdict(int)
        for t in barcodes:
            ma[t] += 1
        barcodes.sort(key=lambda x: (-ma[x], x))
        ans = [0] * len(barcodes)
        ans[::2] = barcodes[:(len(barcodes) + 1) // 2]
        ans[1::2] = barcodes[(len(barcodes) + 1) // 2:]
        return ans

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/130665688

猜你喜欢

转载自blog.csdn.net/Tisfy/article/details/130665688