1.题目链接:
2.题目描述:
在一个仓库里,有一排条形码,其中第 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 | |
| ◦ |
| |
3. 解法(贪心):
贪心策略:
每次处理一批相同的数字,往 n 个空里面摆放;
每次摆放的时候,隔一个格子摆放一个数;
优先处理出现次数最多的那个数。
Java算法代码:
class Solution {
public int[] rearrangeBarcodes(int[] b) {
Map<Integer, Integer> hash = new HashMap<>();
int maxVal = 0, maxCount = 0;
for(int x : b){
hash.put(x, hash.getOrDefault(x, 0) + 1);
if(maxCount < hash.get(x)){
maxVal = x;
maxCount = hash.get(x);
}
}
int n = b.length;
int [] ret = new int[n];
int index =0;
//先处理出现次数最多的那个数
for(int i = 0; i < maxCount; i++){
ret[index] = maxVal;
index += 2;
}
hash.remove(maxVal);
for(int x : hash.keySet()){
for(int i = 0; i < hash.get(x); i++){
if(index >= n) index = 1;
ret[index] = x;
index +=2;
}
}
return ret;
}
}
运行结果:

贪心策略:

&spm=1001.2101.3001.5002&articleId=148210842&d=1&t=3&u=8e339ad8dbd54b7192b647c81e946955)
205

被折叠的 条评论
为什么被折叠?



