2017-09-02 9 views
0

配列からの非負の最大サブ配列を確認してください。 サブアレイは連続している必要があります。つまり、2番目と4番目の要素を選択して3番目の要素をスキップして作成されたサブアレイは無効です。セグメンテーションフォールトの取得(ベクトル宣言)

最大サブ配列は、サブ配列の要素の和で定義されます。サブアレイAは、sum(A)> sum(B)の場合、サブアレイBより大きい。

これは私のソリューションです:

vector<int> Solution::maxset(vector<int> &A) { 
// Do not write main() function. 
// Do not read input, instead use the arguments to the function. 
// Do not print the output, instead return values as specified 
// Still have a doubt. Checkout www.interviewbit.com/pages/sample_codes/ for more details 

    vector <int> bla; 
    int sum[100]={0}; 
    int k = 0; 
    int j = 1; 

    for (int i =0; i < A.size(); i++){ 
     if (A[i] > -1){ 
      sum[k] = A[i] + sum[k]; 
     } 
     else { 
      k++; 
     } 
    } 

    cout<<sum[0]<<" "; 
    cout<<sum[1]<<" "; 
    cout << sum[2] << " "; 

    int s = 0; 

    for (int i =0; i< 100; i++){ 
     if (s < sum[i]){ 
      s = sum[i]; 
      k = i; 
     } 
    } 

    cout << s; 

    int count = 0; 
    for (int i =0; i < A.size(); i++){ 
     if (A[i] < 0) { 
      count ++; 
     } 

     if (count == k) { 
      int j = i+1; 
      int x = 0; 
      while (A[j] > 0 && j< (A.size()-1)) { 
       // bla[x] = A[j]; 
       x++; 
       j++; 
      } 
     } 
    } 

    return bla; 
} 

私はラインBLAのコメントを解除する場合は、[X] [j]を=、私は、セグメンテーションエラーが発生します。誰かがこのエラーを解消する方法を説明できますか?私はスタックの中に十分なスペースがないことをどこかで読んでいます。私はどのように理解できません。 あなたはベクトルオブジェクトにサイズを渡すことができますかあなたはそれが0サイズのベクトルオブジェクトを作成するデフォルトコンストラクタです呼び出すことができますあなたの

+2

は、デバッガを使用する方法については、適切な時期です。ところで、コードに欠陥があります。 – WhiZTiM

+2

特定のサイズを持たないベクトルを定義すると、* empty *になります。その中のインデックスは* out of bounds *です。 –

+0

@Someprogrammerdude次にインデックスを作成できない場合、どのようにベクトルに値を割り当てるのですか? –

答えて

0

ありがとうございます。

std::vector<int> vecInt(10); 
for(int i(0); i < vecInt.size(); i++) 
    vecInt[i] = i; 

それとも、サイズ0でベクトルを宣言することができます:あなたは未割り当てられたスペースで値を格納しようとしているので

std::vector<int> vecInt; 
vecInt[0] = 10; // segfault 

だからあなたの例では、このようにすることができます:クリアするには、このような問題を格納するために使用push_backpopを解決するために

while (A[j] > 0 || j< (A.size()-1)) { 
    // bla[x] = A[j]; 
    bla.push_back(A[j]); 
    x++; 
    j++; 
} 
+1

注:コード内のコメントとは対照的に、ループ本体が決して入力されないため、これらの2番目のものは* seg-faultではありません。 'vecInt.size()'はゼロになり、 'i WhozCraig

+0

@WhozCraig:ありがとう!あなたが正しいです。私はそれに気付かなかった。 – Raindrop7

関連する問題