Сообщения

Сообщения за декабрь, 2019

Удалить элемент в списке

Изображение
Написать функцию, которая удаляет звено (за исключением последнего) в односвязном списке, на вход поступает только звено, которое необходимо удалить. Например, список = [4,5,1,9] выглядит так: Example 1: Input: head = [4,5,1,9], node = 5 Output: [4,1,9] Example 2: Input: head = [4,5,1,9], node = 1 Output: [4,5,9] Компилируемое решение:  /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public void deleteNode(ListNode node ) { ListNode temp = node . next ; if (temp!=null) { node . val = temp.val; node . next = temp.next; temp = null; } } }

Число единичек в двоичном представлении числа

Дано целочисленное число N без знака. Нужно подсчитать количество единичек в его двоичном представлении. Например, число 11 в двоичном представлении выглядит 1011. Значит ответ будет 3. Идея решения: если самый правый бит равен 1, то увеличить счётчик единичек. И в любом случае (0 или 1 справа) сдвинуть битовое представление на 1 позицию вправо, заменяя свободные биты слева нулями. Повторять до тех пор, пока результат сдвига не станет равен нулю. Компилируемый код идеи решения:      int sum=0;         while(N!=0) {             if ((N&1)==1) sum++;             N = N >>> 1;         } Проблема в том, что для больших чисел такой подсчёт может быть непозволительно длинным. Ускорим алгоритм, находя сразу позицию p самого правого ненулевго бита и сдвигая число N на чис...

Заправки

Источник : https://www.interviewbit.com/problems/gas-station/ Задача . Дано два массива A и B одинакового размера N. N - это число заправок расположенных на пути, который закольцовывается. Массив A показывает, сколько топлива хранится на каждой заправке i. У вас есть машина с беконечным баком. А в массиве B элемент i показывает, сколько топлива расходует ваша машина при переезде из точки i в i+1. Нужно вернуть индекс i заправки, начиная с которой вы можете объехать все заправки. Либо вернуть -1, если такого индекса не существует (с какой заправки не стратуй, всё равно останешься где-то без топлива). Пример. Input 1: A = [1, 2] B = [2, 1] Output 1: 1 Объяснение: Если вы стартуете с индекса 0, вы можете залить в бак A[0] = 1 единиц топлива. Но вам нужно B[0] = 2 единицы топлива, чтобы доехать до заправки с индексом 1. Если вы стартуете с заправки под индексом 1, вы можете залить в бак A[1] = 2 единицы топлива. И вам нужно B[1] = 1 топлива, ч...

Алгоритм Кадана: подмассив с максимальной суммой значений (maximum subarray problem)

Изображение
Задача . Дан (неотсортированный) массив с числами, нужно найти его непрерывный подмассив так, чтобы сумма чисел была максимальной среди всех возможных других подмассивов. Пример . Показан на рисунке ниже. Дан массив {-2, 1, -3, 4, -1, 2, 1, -5, 4}. Его максимальный непрерывыный подмассив выделен желтым маркером и состоит из чисел {4, -1, 2, 1}. Сумма этого подмассива равна 6 и это максимальное значение среди любых других непрерывных подмассивов даввного массива. Решение в лоб . Для каждого элемента массива считаем возможные непрерывные подмассивы, которые его содержат. То есть, начинаем с числа -2. Сумма = -2. Затем рассамтриваем подмассив {-2, 1}. Сумма = -1. Затем рассамтриваем подмассив {-2, 1, -3}. Сумма  = -4. ... Подмассив, который содержит весь массив от -2 до 4 (конец массива). Это мы обработали число 2. Теперь стартуем с 1. Затем рассматриваем {1, -3}. ... И так далее, пока не дойдём до подмассива от 1 до конца массива. И так далее. Нетрудно замети...