Teaching Kids Programming – Maximum Sum of K Numbers from Front and Back of Array (Sliding Window Algorithm)


Teaching Kids Programming: Videos on Data Structures and Algorithms

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:
Input: cardPoints = [1,2,3,4,5,6,1], k = 3
Output: 12
Explanation: After the first step, your score will always be 1. However, choosing the rightmost card first will maximize your total score. The optimal strategy is to take the three cards on the right, giving a final score of 1 + 6 + 5 = 12.

Example 2:
Input: cardPoints = [2,2,2], k = 2
Output: 4
Explanation: Regardless of which two cards you take, your score will always be 4.

Example 3:
Input: cardPoints = [9,7,7,9,7,7,9], k = 7
Output: 55
Explanation: You have to take all the cards. Your score is the sum of points of all cards.

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

Hints:
Let the sum of all points be total_pts. You need to remove a sub-array from cardPoints with length n – k.
Keep a window of size n – k over the array. The answer is max(answer, total_pts – sumOfCurrentWindow)

Maximum Points You Can Obtain from Cards (Two Pointer/Sliding Window Algorithm)

We can take all numbers from the front, or all numbers from the back, or some from the front and some from the back. In all these cases, the remaining numbers is a continuous subarray/sublist. So we just need to minimize the sum of the subarray which has a fixed size of N-K where N is the total number of elements in the array. The sum of the entire array is fixed.

The time complexity is O(N). The space complexity is O(1). When we shift the window, we can update the sum of the window in O(1) constant time.

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
    def maxScore(self, arr: List[int], k: int) -> int:
        n = len(arr)        
        i = n - k
        win = sum(arr[:n-k])
        mv = win
        while i < n:         
            win += arr[i]
            win -= arr[i - (n - k)]
            mv = min(mv, win)
            i += 1
        return sum(arr) - mv
class Solution:
    def maxScore(self, arr: List[int], k: int) -> int:
        n = len(arr)        
        i = n - k
        win = sum(arr[:n-k])
        mv = win
        while i < n:         
            win += arr[i]
            win -= arr[i - (n - k)]
            mv = min(mv, win)
            i += 1
        return sum(arr) - mv

See also: Teaching Kids Programming – Maximum Sum of K Numbers from Front and Back of Array (Prefix/Suffix Sum Algorithm)

–EOF (The Ultimate Computing & Technology Blog) —

GD Star Rating
loading...
575 words
Last Post: Teaching Kids Programming - Eat Bananas/Apples in K Hours with Minimal R (Binary Search Algorithm)
Next Post: Teaching Kids Programming - Maximum Sum of K Numbers from Front and Back of Array (Prefix/Suffix Sum Algorithm)

The Permanent URL is: Teaching Kids Programming – Maximum Sum of K Numbers from Front and Back of Array (Sliding Window Algorithm)

Leave a Reply