ハッカーのバイナリ検索チュートリアルを解決していましたが、明らかに何かが間違っています...入力形式は次のとおりです。 N =配列内の要素数はありません 昇順 Q =テストケース 要素の数は、Qテストケースで発見されるバイナリ検索C++(このコードの欠陥は何ですか)
#include <iostream>
using namespace std;
int main()
{
int n;cin>>n;
int ar[n];for(int y=0;y<n;y++) cin>>ar[y];
int q;cin>>q;
for(int u=0;u<q;u++)
{
int j;cin>>j;
int low=0,high=n-1,mid=(low+high)/2;
while(low<high)
{
mid=(low+high)/2;
if(ar[mid]<j) low=mid+1;
if(ar[mid]>j) high=mid-1;
}
cout<<mid-1<<endl;
}
return 0;
}
編集:
なぜ可変サイズの配列を宣言するのがそんなに嫌いなのですか?ベクトルよりも書く方がずっと効率的です...そしてC++ 99標準によれば完全に合法です。これをC++ 11標準で使用しています私のすべてのプログラムは可変サイズの配列で動作します。
この欠陥を指摘していただきありがとうございます。 j == ar [mid]の場合は未処理です。コードはその後に動作するはずです。
それは自動チェックされている..私はすでにこれがhackerearth上の問題で述べたように、完全に不要...答えのプレゼンテーションや入力を得ることについて忘れて...
回答台無しに出力形式をこれがして提示私の最初の質問は、コミュニティがとても助けになりました。 :)。また、なぜそれが..コードを挿入するのは難しい..私は、インサートのコードを試してみましたコピーし、その中に貼り付ける..しかし、それは動作しませんでしたされ、私は3であり、4つのスペース:(
適切なツールは、あなたのデバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
バイナリ検索では、検索するコレクションがソートされている必要があります。そうでない場合、検索は機能しません。 –
また、C++には[可変長配列](https://en.wikipedia.org/wiki/Variable-length_array)がなく、代わりに 'std :: vector'を使います。 –