dポイントプレゼントキャンペーン実施中!

typedef struct Solution{
int numsSize;
int *original;
int *shuffled;
} Solution;

Solution* solutionCreate(int* nums, int numsSize) {
Solution *sol = (Solution *)malloc(sizeof(Solution));
sol->numsSize = numsSize;

//int ori[numsSize];
//sol->original = ori;

sol->original = (int *)malloc(sizeof(int)*numsSize);
sol->shuffled = (int *)malloc(sizeof(int)*numsSize);
for (int i=0;i<numsSize;i++){
sol->original[i]=nums[i];
sol->shuffled[i]=nums[i];
}


//memcpy(sol->original, nums, sizeof(int) * numsSize);
//memcpy(sol->shuffled, nums, sizeof(int) * numsSize);

return sol;
}

/** Resets the array to its original configuration and return it. */
int* solutionReset(Solution* obj, int* retSize) {
*retSize = obj->numsSize;
// copy original to shuffled
memcpy(obj->shuffled, obj->original, sizeof(int) * obj->numsSize);
return obj->shuffled;
}

void swap(int* a, int*b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}

/** Returns a random shuffling of the array. */
int* solutionShuffle(Solution* obj, int* retSize) {
for(int i = obj->numsSize-1;i>0;i--){
swap(&(obj->shuffled[i]),&(obj->shuffled[rand()%(i+1)]));

}

*retSize = obj->numsSize;
return obj->shuffled;
}

void solutionFree(Solution* obj) {
free(obj->original);
free(obj->shuffled);
free(obj);
}

このプログラムの説明を詳しくしてくれませんか? leetcode384の問題です。
自分で書いたわけではないのでわかりません。
1行1行に説明を加えてくれると助かります。

A 回答 (3件)

何をシているのかは製作者しかわかりません。


データや処理methodを追ってもわからないものはたくさんあります。プログラムとはそういうものです。
ですから、仕様書(言葉や図で説明してあるもの)が大事なのです。
ソートプログラムなども、非常に難解な命令の羅列になっていますが、「大きい順に並べ替える」と書いてあれば非常に簡潔明瞭です。
    • good
    • 0

複数個の整数値を保持できる


Solutionって構造体があって
初期データで生成したり
順番をかき混ぜたり、破棄したりする
関数が書いてあるだけ。

全体の処理目的や処理の流れは全く不明。
    • good
    • 0

> 1行1行に説明を加えてくれると助かります。



そんな必要ある?

> 自分で書いたわけではないのでわかりません。

「何が目的のプログラム」なのかも分かんないの?
だとすれば、「レベルが合ってない」ので単に読むのが早い、って事になるんだけど・・・・・・。

そもそも、

> Returns a random shuffling of the array.

っつーんだから、配列の要素をランダムに交換せよ(だからシャッフル)、ってのが目的でしょ。
だから配列の要素を交換する「swap」を書いて、そいつをランダムに発動してる。
そんだけ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!