Ratiorg在生日那天从CodeMaster那里获得了大小不同的雕像作为礼物,每个雕像都有一个非负整数大小。由于他喜欢使事物完美,因此他希望将它们从最小到最大进行排列,以使每个雕像都比前一个雕像大1。他可能需要一些其他雕像才能实现。帮助他找出所需的最少额外雕像数量。
例
对于雕像= [6,2,3,8],输出应为
makeArrayConsecutive2(statues)= 3。
这是代码斗争的问题。
这是我的代码写在下面
#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个值的向量)时,它是不正确的。请您解释一下问题?
最佳答案
在for
的最后一次迭代中,statues[i+1]
将超出范围,从而导致未定义的行为。您需要在statuses
循环之前添加for
不为空的检查,然后迭代直到size - 1
。