- 题目:
- 代码:
public class text5 { public static void main(String[] args) { int[] barcodes={7,7,7,8,5,7,5,5,5,8}; int[] retBarcodes = rearrangeBarcodes(barcodes); for (int i=0;i<retBarcodes.length;i++){ System.out.print(retBarcodes[i]+" "); } } public static int[] rearrangeBarcodes(int[] barcodes) { int[] cnt = new int[10005]; int[] ret = new int[barcodes.length]; //按照本身的偏移量进行记录每个数出现的次数 for(int i=0;i<barcodes.length;++i){ cnt[ barcodes[i] ]++; } int max=0; int id =0; //找到的元素最多的个数,以及它的位置编号 for(int i=1;i<=10000;++i){ if(max < cnt[i]){ max=cnt[i]; id=i; } } //按照上述给的例子这里id=5,max=4 int j = 0; //插入数据: 先给上边求得值进行放置 for(;j<barcodes.length;j+=2){ if(cnt[id]>0){ --cnt[id]; ret[j] = id; } else{ break; } } if(j>=barcodes.length){ j=1; } /** * 上边插入: * [5] [] [5] [] [5] [] [5] [] [这里是j指向的位置] [] */ //之后紧接着上边判断的位置,进行插入元素 for(int i=1;i<=10000;++i){ while(cnt[i]>0){ --cnt[i]; ret[j]=i; j+=2; if(j>=barcodes.length){ j=1; } } } return ret; } }
- 实例:
Java实现:LeetCode距离相等的条形码
最新推荐文章于 2024-02-03 19:56:15 发布