
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件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
何をシているのかは製作者しかわかりません。
データや処理methodを追ってもわからないものはたくさんあります。プログラムとはそういうものです。
ですから、仕様書(言葉や図で説明してあるもの)が大事なのです。
ソートプログラムなども、非常に難解な命令の羅列になっていますが、「大きい順に並べ替える」と書いてあれば非常に簡潔明瞭です。
No.2
- 回答日時:
複数個の整数値を保持できる
Solutionって構造体があって
初期データで生成したり
順番をかき混ぜたり、破棄したりする
関数が書いてあるだけ。
全体の処理目的や処理の流れは全く不明。
No.1
- 回答日時:
> 1行1行に説明を加えてくれると助かります。
そんな必要ある?
> 自分で書いたわけではないのでわかりません。
「何が目的のプログラム」なのかも分かんないの?
だとすれば、「レベルが合ってない」ので単に読むのが早い、って事になるんだけど・・・・・・。
そもそも、
> Returns a random shuffling of the array.
っつーんだから、配列の要素をランダムに交換せよ(だからシャッフル)、ってのが目的でしょ。
だから配列の要素を交換する「swap」を書いて、そいつをランダムに発動してる。
そんだけ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# 関数へのポインタを返す関数 2 2022/02/05 22:12
- C言語・C++・C# C言語の問題です。 1 2021/12/22 02:57
- C言語・C++・C# C言語 ループ中からの関数の呼び出し方のコーディング 2 2021/11/02 09:33
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C#のコンパイルエラーCS0120に関する質問です。 1 2021/12/21 08:51
- C言語・C++・C# C#のラムダ式に関する質問です 2 2021/12/19 23:04
- C言語・C++・C# C 開放してるのにエラー(double free or corruption (!prev))がでる 4 2021/10/30 17:51
- C言語・C++・C# #include <stdio.h> #include <stdlib.h> #include <s 2 2021/12/05 16:11
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語で分からないところがあり...
-
gccで64ビット整数
-
リッチテキストへの行ごとの背...
-
n進数を10進数に変換するプログ...
-
VB6.0でコンピュータ名の取得
-
【C++】行列データの読み込み
-
cプログラミングについて…
-
VB6でAddressOfを使った良いサ...
-
cinの区切り文字の書き方
-
剰余演算を論理演算と加減算に...
-
C言語における対称行列の作り方...
-
C言語 エラーの原因がわからな...
-
単方向リストに適当な値を入れ...
-
c言語 文字化けします
-
メルセンヌ・ツイスタの乱数生...
-
putchar(getchar())はなぜできない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報