N個の要素、例えば{4,2,11、-2,1}の配列Aを持つと、すべてのサブ配列から最大値を持つ要素を見つける必要があります。配列の時間の複雑さから最大のJavaを見つける
for i = 0, leftArray = {4} , rightArry = {2,11,-2,1}
for i = 1, leftArray = {4,2}, rightArry = {11,-2,1}
for i = 2, leftArray = {4,2,11}, rightArry = {-2, 1}
for i = 3, leftArray = {4,2,11,-2}, rightArry {1}
だから、私はこのようなものが必要です:サブ配列はこのように生成され、我々は時間の複雑さを気にしない場合、これは問題になるwould't
をfor (int i = 0; i < A.length; i++){
//LOGIC HERE
System.err.println(String.format("Left array max = %s, Right array max = %s",lmax, rmax));
}
BUT期待される最悪ケースの時間複雑度はO(N)
私はO(N)アルゴリズムでこれをどのようにして実現するのか分かりません。どんな助けもありがとう。
EDIT:
私の現在のソリューション:
for (int i = 0; i < A.length; i++)
{
if(i == A.length - 1)
break;
int[] l = Arrays.copyOfRange(A, 0, i + 1);
int[] r = Arrays.copyOfRange(A, i + 1, A.length);
Arrays.sort(l);
Arrays.sort(r);
System.err.println(l[l.length -1] + " " + r[r.length - 1]);
}
現在のソリューションとは何か、その複雑さは何ですか? –
サブアレイも生成する必要がありますか? – Arctigor
昇順でのみ生成する必要がありますか?そうでない場合は、 'leftArray'の最大値を得るために' i'を昇順にループし、 'rightArray'の最大値を得るために' i'を降順にループします。 –