#c
#c
Вопрос:
пожалуйста, помогите мне устранить ошибку в приведенном ниже коде:
int smallestRangeII(vector<int>amp; A, int k) {
sort(A.begin(), A.end());
int mini = INT_MAX;
int maxi = INT_MIN;
int x, y;
int n = A.size();
for(int i=0;i<n;i ){
x = A[i] k;
y = A[i]-k;
if(x <= A[n-1] amp;amp; x<=maxi)
maxi = x;
else if(y>=A[0] amp;amp; y>=mini)
mini = y;
}
return (maxi - mini);
}
Я получаю ошибку
ошибка времени выполнения: переполнение целого числа со знаком: -2147483648 — 2147483647 не может быть представлено в типе ‘int’ (solution.cpp ) СВОДКА: UndefinedBehaviorSanitizer: неопределенное поведение prog_joined.cpp:27:22
Заранее спасибо
Комментарии:
1. Где строка 27?
Ответ №1:
Вы возвращаете целое число со знаком, где значение представляет собой разницу между максимальным и минимальным целочисленными значениями (это возможно для пустого A
). Даже если A
значение не пустое, нет гарантии, что A
оно не содержит этих экстремальных значений. Значение INT_MAX - INT_MIN
в два раза больше значения int
, которое может представлять тип.
Одним из возможных решений является возврат unsigned int
:
unsigned int smallestRangeII(vector<int>amp; A, int k);