Leetcode406. 身長に応じてキューを再構築(C言語)
10671 ワード
Leetcode406. 身長に応じてキューを再構築(C言語)
アルゴリズム-貪欲な思想:アルゴリズムとデータ構造の参考
题目:顺番を狂わせる一群が行列を作っていると仮定します.各人は整数対(h,k)で表され、hはこの人の身長であり、kはこの人の前に並び、身長がh以上の人数である.このキューを再構築するアルゴリズムを作成します.例:入力:[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]出力:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
構想:まず身長によって小さいから大きいまで並べて、前の人数によって挿入します.要素対応の位置(配列を構築する場合は初期化の処理に注意):people[i]が存在する位置=その前の空席数+people[i][0]の数
参考力扣大人
コード:
アルゴリズム-貪欲な思想:アルゴリズムとデータ構造の参考
题目:顺番を狂わせる一群が行列を作っていると仮定します.各人は整数対(h,k)で表され、hはこの人の身長であり、kはこの人の前に並び、身長がh以上の人数である.このキューを再構築するアルゴリズムを作成します.例:入力:[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]出力:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
構想:まず身長によって小さいから大きいまで並べて、前の人数によって挿入します.要素対応の位置(配列を構築する場合は初期化の処理に注意):people[i]が存在する位置=その前の空席数+people[i][0]の数
参考力扣大人
コード:
int compare(int **a,int **b){
return (*(int**)a)[0]-(*(int**)b)[0];
}
int** reconstructQueue(int** people, int peopleSize, int* peopleColSize, int* returnSize, int** returnColumnSizes){
int ** r= (int **)malloc(peopleSize * sizeof(int *));
for(int i = 0; i < peopleSize; i++) {
r[i] = (int *)malloc(sizeof(int) * peopleColSize[i]);
memset(r[i], -1, sizeof(int) * peopleColSize[i]); // -1
} //
qsort(people, peopleSize, sizeof(int *), compare);
for (int i = 0; i < peopleSize; i++) {
int index = people[i][1] + 1;
// people[i] = + people[i][0]
for (int j = 0; j < peopleSize; j++) { // peopleSize , i
if ((r[j][0] == -1 || r[j][0] == people[i][0]) && (--index == 0)) {
//r , people
r[j][0] = people[i][0];
r[j][1] = people[i][1];
break;
}
}
}
*returnSize = peopleSize; //
*returnColumnSizes = peopleColSize;
return r;
}