链接:力扣https://leetcode.cn/problems/distant-barcodes/
思路:按照条形码出现次数从大到小排序,优先交差安排次数最多的条形码
例:1 1 2 2 4 4 4 4 5 6 (len=10)
1.先安排4:4,,4,,4,,4,---
2.再安排2和1:4,2,4,1,4,1,4,,2,,
3.安排5和6:4,2,4,1,4,1,4,5,2,6,
注:交差安排可以理解为,先安排偶数位,再安排奇数位
我的代码如下:
// // Created by 彭同学 on 2023/5/14. // #include <iostream> #include <vector> using namespace std; struct mydata{ int id; int num; }nums[1005]; bool cmp(mydata a,mydata b){ return a.num>b.num; } class Solution { public: vector<int> rearrangeBarcodes(vector<int>& barcodes) { int len=barcodes.size(); if(len==1){return barcodes;} vector<int>ans(len); for(int i=0;i<1005;i++){ nums[i].id=i; nums[i].num=0; } for(int i=0;i<len;i++){ nums[i].num++; } sort(nums,nums+1005,cmp); int k=0; int i=0; while(i<len){ if(nums[k].num!=0){ ans[i]=nums[k].id; nums[k].num--; i+=2; }else{ k++; } } i=1; while(i<len){ if(nums[k].num!=0){ ans[i]=nums[k].id; nums[k].num--; i+=2; }else{ k++; } } return ans; } };