测试用例失败的矢量大小为10

时间:2018-01-28 09:05:01

标签: c++ sorting c++11 vector stdvector

Ratiorg为他的生日从CodeMaster获得了不同大小的雕像作为礼物,每个雕像都有一个非负整数。由于他喜欢把事情做得很完美,所以他希望将它们从最小到最大排列,这样每个雕像都会比前一个雕像精确地大1个。他可能需要一些额外的雕像来完成它。帮助他找出所需的最少额外雕像数量。

实施例

对于statues = [6,2,3,8],输出应为 makeArrayConsecutive2(statues)= 3。

这是codefights的一个问题。 这是我的代码,如下所示

#include <iostream>
#include <vector>
#include<algorithm>

using std::vector;

int makeArrayConsecutive2(std::vector <int> statues) {

    vector<int>::size_type size = statues.size();
    sort( statues.begin(), statues.end() );
    int counter = 0;
    for( int i = 0; i<size; i++ )
    {
        int dif =  statues[i+1] - statues[i] - 1; 
        if( dif >= 1 ) {counter+=dif;}
    }
    return counter;
}
int main()
{
  vector<int> c = {1,2,3,4,5,6,7,8,9,10};

  std :: cout<<"You need "<<makeArrayConsecutive2(c)<<" statues"<<std::endl;

  return 0;
}

当我用向量c的这个特定值运行代码时,它输出误解值。所有其他情况都运行正确,但是当我声明10维向量(我的意思是具有10个值的向量)时,它不能正常工作.Could你能解释一下这个问题是什么吗?

1 个答案:

答案 0 :(得分:1)

$_SESSION['role'] = $user['database-role-column-name']; 周期for的最后一次迭代将超出界限,导致未定义的行为。您需要在statues[i+1]循环之前添加statuses不为空的检查,然后迭代到for