leetcode-1054-距离相等的条形码-C语言

    xiaoxiao2025-02-25  44

    /** * 算法思想: * 关键是首先填满index为0,2,4,6,8等偶数的位置,然后剩余的元素填进空白处就行了。 */ #define LEN 10001 typedef struct node{ int index; int cnt; } Node; int cmp(Node *a, Node *b){ return a->cnt - b->cnt; } int* rearrangeBarcodes(int* arr, int len, int* returnSize){ Node ar[LEN]; int i,j=0; int *ret = (int *)malloc(sizeof(int) * len); int index = 0; memset(ret, 0, sizeof(int) * len); memset(ar, 0, sizeof(ar)); for(i=0; i<LEN; i++){ ar[i].index = i; } for(i=0; i<len; i++){ ar[arr[i]].cnt++; } qsort(ar, LEN, sizeof(Node), cmp); for(i=LEN-1; i>=0; i--){ if(!ar[i].cnt) continue; while(ar[i].cnt){ ret[j] = ar[i].index; ar[i].cnt--; j += 2; if(j >= len) break; } if(j >= len) break; } for(i=LEN-1; i>=0; i--){ if(!ar[i].cnt) continue; j = 0; while(ar[i].cnt){ if(ret[j]){ j++; if(j >= len) j=0; }else{ ret[j] = ar[i].index; ar[i].cnt--; j += 1; } } } *returnSize = len; for(i=0; i<index-1; i++){ if(ret[i] == ret[i+1]){ printf("err!, index = %d \n", i); } } return ret; }
    最新回复(0)