Likou 브러싱 노트 : 1423. 획득 할 수있는 최대 포인트 수 (창을 슬라이드하여 최소값을 취하고 독창적으로 문제를 해결하고 문제 해결의 코드와 주석을 완성)

이야기:

1423 년 、 사용 가능한 최대 포인트

여러 카드가 한 줄로 배열되어 있으며 각 카드에는 해당 포인트가 있습니다. 포인트 수는 정수 배열 cardPoints에 의해 제공됩니다.

각 행동에 대해 라인의 시작 또는 끝에서 카드를 가져올 수 있으며, 마지막에는 정확히 k 장의 카드를 가져와야합니다.

당신의 포인트는 당신의 손에있는 모든 카드의 포인트의 합계입니다.

정수 배열 cardPoints와 정수 k를 주면 얻을 수있는 최대 포인트 수를 반환하십시오.

예 1 :

입력 : cardPoints = [1,2,3,4,5,6,1], k = 3
출력 : 12
설명 : 첫 번째 행동에서 어떤 카드를 사용하든 점수는 항상 1입니다. 그러나 가장 오른쪽에있는 카드를 먼저 가져 가면 사용 가능한 포인트가 최대화됩니다. 최적의 전략은 오른쪽에있는 3 장의 카드를 가져가는 것이며, 마지막 포인트는 1 + 6 + 5 = 12입니다.

예 2 :

입력 : cardPoints = [2,2,2], k = 2
출력 : 4
설명 : 어떤 두 장의 카드를 줍든지 상관없이 얻을 수있는 점수는 항상 4입니다.

예 3 :

입력 : cardPoints = [9,7,7,9,7,7,9], k = 7
출력 : 55
설명 : 모든 카드를 집어 야하며 얻을 수있는 점수는 모든 점수의 합입니다. 카드.

예 4 :

입력 : cardPoints = [1,1000,1], k = 1
출력 : 1
설명 : 중간에 카드를 넣을 수 없으므로 얻을 수있는 최대 점수는 1입니다.

예 5 :

입력 : cardPoints = [1,79,80,1,1,1,200,1], k = 3
출력 : 202

신속한:

1 <= cardPoints.length <= 10 ^ 5
1 <= cardPoints [i] <= 10 ^ 4
1 <= k <= cardPoints.length

문제 해결 아이디어 :

아이디어

배열 cardPoints의 길이는 n이라는 것을 기억하십시오. 처음과 끝에서 k 개의 카드 만 가져올 수 있으므로 마지막 남은 카드는 연속적인 nk 카드 여야합니다.

남은 카드 포인트 합계의 최소값을 찾아서 카드 포인트 합계의 최대 값을 찾을 수 있습니다.

연산

나머지 카드는 연속적이기 때문에 고정 길이 nk의 슬라이딩 윈도우를 사용하여 배열 cardPoints를 가로 질러 슬라이딩 윈도우의 최소값을 찾은 다음 모든 카드의 포인트 합계에서 최소값을 빼서 얻을 수 있습니다. 테이크 아웃 카드 포인트 합계의 최대 가치.

문제 해결 파이썬 코드 :

class Solution:
    def maxScore(self, cardPoints: List[int], k: int) -> int:
        n = len(cardPoints)
        # 滑动窗口大小为 n-k
        windowSize = n - k
        # 选前 n-k 个作为初始值
        s = sum(cardPoints[:windowSize])
        minSum = s
        for i in range(windowSize, n):
            # 滑动窗口每向右移动一格,增加从右侧进入窗口的元素值,并减少从左侧离开窗口的元素值
            s += cardPoints[i] - cardPoints[i - windowSize]
            minSum = min(minSum, s)
        return sum(cardPoints) - minSum

저자 : LeetCode-Solution
링크 : https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/solution/ke-huo-de-de-zui-da-dian-shu -by-leetcode-7je9 /
출처 : LeetCode https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/

추천

출처blog.csdn.net/weixin_44414948/article/details/113727700