1054. 距离相等的条形码

    xiaoxiao2024-12-18  10

    转载请声明地址四元君

    **1054. 距离相等的条形码 **

    题目难度 Medium

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

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

    示例 1:

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

    示例 2:

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

    提示:

    1 <= barcodes.length <= 10000

    1 <= barcodes[i] <= 10000

    思路

    一开始直接用回溯法,但是时间超了。

    后来发现根本不用这么复杂…直接插空。先计算每个数字有多少个,记录下来,然后开始插空,插两遍。每一遍都是隔一个插一个。

    代码

    class Solution { public: vector<int> rearrangeBarcodes(vector<int>& barcodes) { vector<int> temp(10001,0); for(int n:barcodes) temp[n]++; vector<int> nums(10001); for(int i=0;i<10001;i++) nums[i]=i; sort(nums.begin(),nums.end(),[&temp](int a,int b){ return temp[a]>temp[b]; }); int step=0; int i=0; while(step<barcodes.size()){ if(temp[nums[i]]>0){ barcodes[step]=nums[i]; temp[nums[i]]--; step+=2; }else{ i++; } } step=1; while(step<barcodes.size()){ if(temp[nums[i]]>0){ barcodes[step]=nums[i]; temp[nums[i]]--; step+=2; }else{ i++; } } return barcodes; } };
    最新回复(0)