Can anyone explain Why Iam getting Runtime Error?

this link does not allow to see other people code

class Solution {

public:

int numRescueBoats(vector& people, int limit) {

```
int start=0,k=2,boat=0;
sort(people.begin(),people.end());
int a=people.size();
while(start<a)
{
int sum=0;
sum=people[start]+people[start+1];
if(sum<=limit)
{
boat++;
start+=2;
}
else
{
boat++;
start+=1;
}
}
return boat;
}
```

};

if size = 1, then what would happen?

You can use simple 2 pointer approach on a sorted array to solve this problem.

Haa.But wanted to know why the above code doesnot works.

if start is n-1 then start + 1 will be n, Which is an invalid index if it is 0 based indexing.

1 Like

Even though correcting the above error,the code passes only half of the test cases.

class Solution {

public:

int numRescueBoats(vector& people, int limit) {

```
sort(people.begin(),people.end());
int n=people.size();
vector<int> vis(n,0);
int nob=0;
for(int i=0;i<n;i++)
{
if(!vis[i])
{
int j=n-1;
while(vis[j]==1 && j>0)
{
j--;
}
while(i<j)
{
if(people[i]+people[j]<=limit)
{
nob++;
vis[i]=1;
vis[j]=1;
break;
}
else
{
j--;
while(vis[j]==1 && j>0)
{
j--;
}
}
}
if(i==j)
{
nob++;
vis[i]=1;
}
}
}
return nob;
}
```

};

I have implemented using two point approach here.For some testcases I am getting TLE.

Have a look at my code below, you will get your mistake.

```
class Solution {
public:
int numRescueBoats(vector<int>& people, int limit)
{
sort(people.begin(),people.end());
int i=0,j=people.size()-1,c=0;
while(i<=j)
{
if(people[i]+people[j]<=limit)
{
c++;
i++;
j--;
}
else
{
j--;
c++;
}
}
return c;
}
};
```

1 Like