#c #vector #segmentation-fault
#c #вектор #ошибка сегментации
Вопрос:
Я пытаюсь решить проблему с leetcode с планированием максимальной прибыли. Я думаю, что в моей логике нет ошибки, но я не понимаю, почему я получаю вышеуказанную ошибку.Я потратил довольно много времени на это, пытаясь понять ошибку, я запустил его в своей локальной ide, и я получаю ошибку сегментации, но я не смог определить, где я выхожу за пределы какой-либо структуры данных в моем коде. Я прилагаю фрагмент кода ниже. пожалуйста, помогите мне разобраться в моей ошибке.
class Solution {
public:
typedef pair<pair<int,int>,int> ppi;
static bool comparator(ppi a,ppi b)
{
if(a.first.second<b.first.second)
return true;
if(a.first.second==b.first.second)
return a.second<b.second;
return false;
}
int jobScheduling(vector<int>amp; startTime, vector<int>amp; endTime, vector<int>amp; profit) {
if(startTime.size()==0) return 0;
int n=profit.size();
vector<ppi> in;
vector<int> dp(0,n);
int i=0,j=0;
for(i=0;i<n;i )
{dp[i]=profit[i];
}
for(i=0;i<n;i )
{in.push_back({{startTime[i],endTime[i]},profit[i]});
}
sort(in.begin(),in.end(),comparator);
for(i=1;i<n;i )
{
for(j=i-1;j>=0;j--)
{
if(in[j].first.second<=in[i].first.first)
{ dp[i]=max(in[i].second dp[j],dp[i-1]);
break;
}
}
dp[i]=max(dp[i],dp[i-1]);
}
return dp[n-1];
}
};
Комментарии:
1.
vector<int> dp(0,n);
Это создает вектор размером 0 . Возможно, вы хотели сделатьvector<int> dp(n);
. Или даже лучше в этом контексте:vector<int> dp = profit;
.2. И когда вы использовали свой отладчик для запуска своей программы, что вы увидели? Это именно то, для чего нужен отладчик. Если вы не знаете, как использовать отладчик, это хорошая возможность узнать, как использовать его для запуска вашей программы по одной строке за раз, отслеживать все переменные и их значения по мере их изменения и анализировать логический процесс выполнения вашей программы. Знание того, как использовать отладчик, является обязательным навыком для каждого разработчика C , без исключений. С помощью вашего отладчика вы сможете быстро находить все ошибки в этой и всех будущих программах, которые вы напишете, без необходимости просить кого-либо о помощи.
3. @TrebledJ спасибо, сэр. Я не смотрел на эту глупую ошибку. это устранило проблему.
4. @SamVarshavchik спасибо за ценное предложение. Я узнаю, как использовать отладчик .
Ответ №1:
Это пройдет аналогично O (N Log N) runtime и O (N) space с использованием map:
// The following block might trivially improve the exec time;
// Can be removed;
static const auto __optimize__ = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
return 0;
}();
// Most of headers are already included;
// Can be removed;
#include <cstdint>
#include <vector>
#include <algorithm>
#include <map>
#include <iterator>
const static struct Solution {
using SizeType = std::int_fast32_t;
static int jobScheduling(
const std::vector<int>amp; start_times,
const std::vector<int>amp; end_times,
const std::vector<int>amp; profits
) {
const SizeType start_length = std::size(start_times);
std::vector<std::vector<SizeType>> jobs;
for (SizeType index = 0; index < start_length; index ) {
jobs.emplace_back(std::vector<SizeType> {
end_times[index],
start_times[index],
profits[index]
});
}
std::sort(std::begin(jobs), std::end(jobs));
map<SizeType, SizeType> job_profit_map = {{0, 0}};
for (const autoamp; job : jobs) {
const SizeType curr = std::prev(job_profit_map.upper_bound(job[1]))->second job[2];
if (curr > std::rbegin(job_profit_map)->second) {
job_profit_map[job[0]] = curr;
}
}
return std::rbegin(job_profit_map)->second;
}
};
Ссылки
- Для получения дополнительной информации, пожалуйста, обратитесь к Доске обсуждений, где вы можете найти множество хорошо объясненных принятых решений на различных языках, включая алгоритмы низкой сложности и асимптотический анализ времени выполнения / памяти1, 2.