Ссылка на проблему - https://leetcode.com/problems/maximum-average-subarray-i/
class Solution
{
public:
double findMaxAverage(vector<int>& nums, int k)
{
deque<pair<int,int>> d; //deque since its a sliding window problem
vector<double> ans; //to return answer
double avg;
double sum=0;
int n=nums.size();
for(int i=0;i<n;i++)
{
if (!d.empty() && d.front().second<=(i-k)) //out of window size
{
avg=sum/k;
ans.push_back(avg); //push the average of k elements in answer vector
sum=sum-d.front().first; //remove the sum of first element when moving to next
d.pop_front(); //remove front element of deque
}
d.push_back(make_pair(nums[i],i)); //push current element in deque
sum=sum+d.back().first; //add it to sum
}
return *max_element(ans.begin(), ans.end()); //return maximum average of subarray
}
};
Я пытался решить проблему leetcode 643 с максимальным средним подмассивом I , что является простой проблемой, основанной на подходе скользящего окна.
Я написал код и получил сообщение об ошибке времени выполнения "Строка 811: Char 16: ошибка времени выполнения: привязка ссылки к нулевому указателю типа "двойной" (stl_iterator.h) РЕЗЮМЕ: UndefinedBehaviorSanitizer: неопределенное поведение /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c"
Кто-нибудь может помочь с этим? Заранее спасибо.





Ошибка здесь
return *max_element(ans.begin(), ans.end());
Если ans пусто, вы разыменовываете ans.end().
Что произойдет, если условие для
if (!d.empty() && d.front().second<=(i-k))будет никогда истинным? Что в итоге держитans(подсказка: ничего). Как вы думаете, что делает разыменование*max_element(ans.begin(), ans.end())при вызове пустой последовательности?