入力:
n
(int
) とn
値 (float
) は、 と の間のランダムな値で為替レート (それらの間で異なります) を表し4
ます5
。出力:上昇曲線と下降曲線を表すために (同じ順序で) 使用できる値の最大数を計算しますか?
ex 八つの価値観
4.5 4.6 4.3 4.0 4.8 4.4 4.7 4.1
出力する必要があります
5 (4.5 4.6 4.8 4.4 4.1)
私のアプローチ
- 連続した
if
s を試すと、曲線条件を尊重するランダムな配列が得られますが、最長ではありません。 - 私はそれに慣れていないのでバックトラックを試みていませんが、それを使ってすべての解を計算し、最も長いものを選ぶ必要があると何かが教えてくれます。
- そして最後に、ブルートフォースですが、これはアルゴリズム設計の課題であるためです。私はそれを手渡さないかもしれません。:)
よりシンプル/より効率的/高速な方法はありますか?
Daniel Lemireのアルゴリズムに基づいた私の試みは次のとおりです。位置0、i、nを考慮していないようです。ifs が問題だと確信していますが、どうすれば修正できますか?
for(int i = 0; i<n-1; i++){
int countp=0; // count ascending
int countn=0; // count descending
for(int j=0;j<=i;j++){
if(currency[j]<currency[j+1]){
countp++;
System.out.print(j+" ");
}
}
System.out.print("|| ");
for(int j=i;j<n-1;j++){
if(currency[j]>currency[j+1]){
countn++;
System.out.print(j+" ");
}
}
System.out.println();
if(countn+countp>maxcount) maxcount=countn+countp;
}