Всем привет, у клавиатуры Кодер Арсений. Проходя одно из соревнований, мне попалась задача, которую я решил одним способом. После этого в разборе задач я увидел как раз технику "Contribution to the Sum" (перевод - "Вклад в сумму"), о которой я и хотел бы рассказать в данной статье. Перед прочтением желательно иметь хотя бы базовое представление о теории вероятностей. Теория Математическое ожидание Мат. ожидание E(x)- среднее значение случайной величины. Считается как сумма произведений возможных значений на вероятность этих значений. Приведу пример: у нас есть монеты 10 копеек, 50 копеек, 1 рубль, 2 рубля, 5 рублей и 10 рублей...
Для нахождения непрерывного подмассива в массиве, сумма которого равна заданному числу, можно использовать алгоритм двух указателей (two-pointer algorithm) или алгоритм "скользящего окна" (sliding window algorithm). Рассмотрим оба подхода. int[] arr = {2, 3, 6, 7, 9, 11};
int sum = 16;
int left = 0; // левый указатель int right = 0; // правый указатель int currentSum = 0;
while (right < arr.length) {
currentSum += arr[right];
while (currentSum > sum && left <= right) {
currentSum -= arr[left];
left++;
}
if (currentSum == sum) {
System...