1423.Maximum Points You Can Obtain from Cards
Problem description:
There are several cards arranged in a row, and each card has an associated number of points. The points are given in the integer array cardPoints
.
In one step, you can take one card from the beginning or from the end of the row. You have to take exactly k
cards.
Your score is the sum of the points of the cards you have taken.
Given the integer array cardPoints
and the integer k
, return the maximum score you can obtain.
Example 1:
1 | Input: cardPoints = [1,2,3,4,5,6,1], k = 3 |
Example 2:
1 | Input: cardPoints = [2,2,2], k = 2 |
Example 3:
1 | Input: cardPoints = [9,7,7,9,7,7,9], k = 7 |
Example 4:
1 | Input: cardPoints = [1,1000,1], k = 1 |
Example 5:
1 | Input: cardPoints = [1,79,80,1,1,1,200,1], k = 3 |
Constraints:
1 <= cardPoints.length <= 105
1 <= cardPoints[i] <= 104
1 <= k <= cardPoints.length
Solution:
Sliding window
To get the maximum result for picking from left or right side, we could think we need to find the smallest subarray sum which length is len(cardPoints)-k
1 | class Solution: |
We don’t need to walk through whole array, could build the sliding window before traversing.
1 | class Solution: |
time complexity: $O()$
space complexity: $O()$
reference:
related problem: