Рубрики
Без рубрики

Решение: максимальные баллы, которые вы можете получить из карт

Это является частью серии объяснений решений LeetCode (индекс). Если вам понравилось это решение или fou … с меткой алгоритмы, JavaScript, Java, Python.

Это является частью серии объяснений решения LeetCode ( index ). Если вам понравилось это решение или нашли его полезным, Пожалуйста, нравится Этот пост и/или upvote Мое решение по сообщению на форумах LeetCode Анкет

Проблема LeetCode #1423 (Medium): максимальные точки, которые вы можете получить из карт

Описание:

( прыгнуть в : Идея решения Код : JavaScript | Python | Java | C ++

Есть несколько карт Аранжируется подряд , и каждая карта имеет связанное количество точек, которые пункты приведены в целочисленном массиве CardPoints Анкет

На одном шаге вы можете взять одну карту с самого начала или с конца ряда. Вы должны взять точно k открытки.

Ваш счет – это сумма точек карт, которые вы взяли.

Учитывая целочисленное массив CardPoints и целое число k , вернуть максимальная оценка Вы можете получить.

Примеры:

Вход: Cardpoints = [1,2,3,4,5,6,1],
Выход: 12
Объяснение: После первого шага ваш счет всегда будет 1. Тем не менее, выбор самой правой карты сначала максимизирует ваш общий балл. Оптимальная стратегия состоит в том, чтобы взять три карты справа, давая окончательный счет 1 + 6 +.
Вход: CardPoints = [ 2,2,2],
Выход: 4
Объяснение: Независимо от того, какую две карты вы принимаете, ваш счет всегда будет 4.
Вход: CardPoints = [9,7,7,9,7,7,9],
Выход: 55
Объяснение: Вы должны взять все карты. Ваш счет – сумма очков всех карт.
Вход: CardPoints = [1,1000,1],
Выход: 1
Объяснение: Вы не можете взять карту посередине. Ваш лучший результат – 1.
Вход: CardPoints = [ 1,79,80,1,1,1,200,1],
Выход: 202

Ограничения:

  • 1.length^5
  • 1 [i]^4
  • 1. длиной

Идея:

( Прыгните к : Описание задачи Код : JavaScript | Python | Java | C ++

Поскольку мы вынуждены принимать K Количество карт, несмотря ни на что, мы можем решить эту проблему с Двухметочная система с скользящее окно подход. Вместо подсчета суммы значений Между Два указателя, мы вместо этого подсчитым сумму значений снаружи скользящее окно.

Мы можем начать с итерации через первое K Карты нашего списка карт ( C ) и поиск Всего точки. На этом этапе наше обратное окно будет картами из я к J.Length – 1 Анкет На каждой итерации мы сдвинем окно назад, снимая одну карту с левой стороны ( -c [i] ) и добавив одну карту с правой стороны ( +c [j] ) каждый время.

Мы должны отслеживать Лучший Возможный результат на каждой итерации, затем вернуть лучший Как только мы достигнем конца.

  • Сложность времени: O (k)
  • Сложность пространства: O (1)

Код JavaScript:

( Прыгните к : Описание задачи Идея решения

var maxScore = function(C, K) {
    let total = 0
    for (let i = 0; i < K; i++) total += C[i]
    let best = total
    for (let i = K - 1, j = C.length - 1; ~i; i--, j--)
        total += C[j] - C[i], best = Math.max(best, total)
    return best
};

Код Python:

( Прыгните к : Описание задачи Идея решения

class Solution:
    def maxScore(self, C: List[int], K: int) -> int:
        best = total = sum(C[:K])
        for i in range (K-1, -1, -1):
            total += C[i + len(C) - K] - C[i]
            best = max(best, total)
        return best

Код Java:

( Прыгните к : Описание задачи Идея решения

class Solution {
    public int maxScore(int[] C, int K) {
        int total = 0;
        for (int i = 0; i < K; i++) total += C[i];
        int best = total;
        for (int i = K - 1, j = C.length - 1; i >= 0; i--, j--) {
            total += C[j] - C[i];
            best = Math.max(best, total);
        }
        return best;
    }
}

C ++ Код:

( Прыгните к : Описание задачи Идея решения

class Solution {
public:
    int maxScore(vector& C, int K) {
        int total = 0;
        for (int i = 0; i < K; i++) total += C[i];
        int best = total;
        for (int i = K - 1, j = C.size() - 1; ~i; i--, j--)
            total += C[j] - C[i], best = max(best, total);
        return best;
    }
};

Оригинал: “https://dev.to/seanpgallivan/solution-maximum-points-you-can-obtain-from-cards-2no”