私はcodingbat.com上でこの問題に出くわした:Problemこれを解決するには(http://codingbat.com/prob/p168357) 'codingbat'の例を効率的に使用しますか?
問題:
はintの配列を考えると、配列は2 7の隣同士が含まれている、または2 7のいずれかによって分離がある場合にtrueを返します要素では、{7,1,7}を使用します。
has77([1、7,7])真
has77([1、7、1、7])→真
has77([1、7、1、1、7→ ])→false
私はそれを解決しましたが、私のアプローチは効率的ではありません。私の解決策のコードは問題に比べて大きいです。誰でも私にこの問題をスマートな方法で解決する方法を教えてもらえますか?
マイコード:
public boolean has77(int[] nums) {
int i = 0;
int arraylength = 0;
while(i != nums.length){
if(nums[i] == 7){
arraylength++;
}
i++;
}
int[] sevens = new int[arraylength];
if(arraylength == 0){
return false;
}
i =0;
int j = 0;
while(i != nums.length){
if(nums[i] == 7){
sevens[j] = i;
j++;
}
i++;
}
i = 0;
while(i != arraylength-1){
if(sevens[i+1] - sevens[i]==1 || (sevens[i+1]- sevens[i]==2)){
return true;
}
i++;
}
return false;
}
効率的ですか?一度だけ配列を反復する。現在の要素が7、前の要素、またはそれ以前の要素が7の場合はtrueを返します。 – Andreas
次の有権者は、私が次回に注意を払うように投票の理由を説明する方が良いでしょう。ちょうどリクエスト! – Deepeshkumar
私はダウン投票者ではありませんが、リンクを提供するだけではありません。リンクが機能しない可能性がありますので、必ずあなたの質問に関連する部分を含めてください。あなたはまだ完全な参照のためのリンクを提供することができます。 – Andreas