2017-04-30 19 views
-2

ジグザグ配列(3つの連続した要素が増加または減少しない配列)をチェックし、削除する要素の最小数を返すコードを書いていますジグザグにしてください。しかし、私は大規模な配列のセグメンテーションフォールトを取得しています。ここでC++で動的に割り当てられたベクタのセグメンテーションエラー

#include <bits/stdc++.h> 

using namespace std; 

int minimumDeletions(vector <int> a,int n){ 
int i,j; 
j=n; 
for(i=0;i<n;i++){ 
    if(a[i]>a[i+1]){ 
     if(a[i+1]>a[i+2]){ 
      a.erase(a.begin()+(i+2)); 
      i--; 
      n--; 
      continue; 
     } 
     else{continue;} 
    } 
    if(a[i]<a[i+1]){ 
     if(a[i+1]<a[i+2]){ 
      a.erase(a.begin()+(i+2)); 
      i--; 
      n--; 
     } 
     else{continue;} 
    } 
} 
j=j-n; 
return j; 
} 

int main() { 
int n; 
cin >> n; 
vector<int> a(n); 
for(int a_i = 0; a_i < n; a_i++){ 
    cin >> a[a_i]; 
} 
// Return the minimum number of elements to delete to make the array zigzag 
int result = minimumDeletions(a,n); 
cout << result << endl; 
return 0; 
} 
+1

イテレータの使用を開始し、インデックスベースのトラバーサルについては忘れてください。多くのエラーを解決します。 – DeiDei

答えて

0
a[i+1] 

あなたはベクトルに格納されていない要素に到達しています。 i = n-1のときは、あなたのベクトルには基本的には格納されていない[n]のことです。

+0

次に、5-6要素の配列ではなぜ機能していますか? – Nitish

関連する問題