Я отвечаю на практические вопросы от geeksforgeeks. И я не могу решить вопрос и получить требуемый результат.
//I am finding the max path using the merge sort algo, where T(n)=O(m+n)
int MaxPath(int a[],int b[],int n,int m){
int i, j, result=0, sum1=0, sum2=0; // sum1 and sum2 store the sums of 1st and 2nd arrays respectively
while(i<n && j<m){
if (a[i]<b[j]){
sum1+=a[i++];
}
else if (a[i]>b[j]){
sum2+=b[j++];
}
else{
result+=Max(sum1,sum2);
sum1=0;
sum2=0;
int temp=i;
while(i<n && a[i]==b[j]){
sum1+=a[i++];
}
while(j<m && a[temp]==b[j]){
sum2+=b[j++];
}
result+=Max(sum1,sum2);
sum1=0;
sum2=0;
}
}
while(i<n){
sum1+=a[i++];
}
while(j<m){
sum2+=b[j++];
}
result+=Max(sum1,sum2);
return result;
}
@ryyker Я написал для этого функцию в своей программе.
Хорошо. В этом случае, если неинициализированные переменные являются единственной проблемой, это не проблема. Но если существует больше проблем, всегда полезно предоставить минимальный воспроизводимый пример, который будет включать определение Max()
, чтобы помочь тем, кто работает над проблемой. :)
хорошо, спасибо @ryyker, я обязательно учту это в следующий раз, когда буду публиковать код.
Неопределенное поведение в начале кода. Это утверждение:
while(i<n && j<m){
Вызывается перед установкой значения i
или j
:
int i, j, result=0, sum1=0, sum2=0;
Обратите внимание, что другие созданные элементы были установлены, но не i
и j
.
Поэтому с этого момента не определено, как будет работать этот цикл while. Инициализируйте все переменные перед их использованием.
Как определяется
Max()
?