編集:要素の値は0から99 に0から99までの範囲であっても可能ということですか?私は、次のコードを使用しようとしたが、それは明らかに間違っている:等しいサイズの2つの配列がCで同じ値を持つかどうかをチェックする方法は? (複雑性O(n))を
#include <stdio.h>
int scrambled(unsigned int a[], unsigned int b[], unsigned int len) {
if (len = 0) {
return 1;
} else {
int sumA, sumB, i;
for (i = 0; i < len; i++) {
sumA += a[i];
}
for (i = 0; i < len; i++) {
sumB += b[i];
}
if (sumA == sumB) {
return 1;
} else {
return 0;
}
}
}
私は同じ値の合計値を持つ2つの配列が同じ値を持っているでしょうが、これはそうではないと仮定しました。 {2,2}
と{3,1}
の合計は同じですが、同じ値ではありません。
は、別の言葉では、1つのアレイは線形複雑時間を持つ別の順列である、場合、私がチェックすることができる方法はありますか?
1)両方の配列をクイックソートし、対応する要素を単に比較する、または2)各配列をミニヒープに変換してから要素をポップして比較することができます。 –
クイックソートの場合、複雑さはO(n)ではないでしょうか? – Lyesmith
ああ、お詫び申し上げます。私はO(n)が制約であることを知らなかった、私はあなたがあなたの方法の複雑さであると言いました。 –