I have written below C++ function which loops through an integer vector. With each pass it subtracts smallest number from all its numbers. It is supposed to return the number of non zero elements at each pass(this is stored in the vector result and is returned). However I am getting "std::bad_alloc" evertime I try to run. The error is gone when remove the line "flag=true". I will need it to work so that the while loop breaks. Help me fix this.
vector<int> cutTheSticks(vector<int> arr) {
int flag=true, min, count;
vector<int> result;
while(flag)
{
min = arr[0];
flag = false;
count = 0;
for(int i=1; i<arr.size(); i++)
{
if(arr[i]<min)
{
min=arr[i];
}
}
for(int i=0; i<arr.size(); i++)
{
if(arr[i]!=0)
{
count++;
flag = true;
}
arr[i] = arr[i]-min;
}
result.push_back(count);
}
return result;
}
Consider the input
[0, 1]
.The minimum is 0, so you subtract 0 from every element (does nothing). Since the second element is 1 ( not 0 ) you set
flag = true
.Nothing has changed in this loop except you have pushed back to the
result
vector. So the loop will repeat untilvector
runs out of memory (or exceeds itsmax_size
).