получение ошибки переполнения целого числа со знаком (c )

#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);