← All problems

2593. Find Score of an Array After Marking All Elements

MediumOpen on LeetCodeProblem statement

Problem Statement

2593. Find Score of an Array After Marking All Elements

Medium


You are given an array nums consisting of positive integers.

Starting with score = 0, apply the following algorithm:

Return the score you get after applying the above algorithm.

 

Example 1:

Input: nums = [2,1,3,4,5,2]
Output: 7
Explanation: We mark the elements as follows:
- 1 is the smallest unmarked element, so we mark it and its two adjacent elements: [2,1,3,4,5,2].
- 2 is the smallest unmarked element, so we mark it and its left adjacent element: [2,1,3,4,5,2].
- 4 is the only remaining unmarked element, so we mark it: [2,1,3,4,5,2].
Our score is 1 + 2 + 4 = 7.

Example 2:

Input: nums = [2,3,5,1,3,2]
Output: 5
Explanation: We mark the elements as follows:
- 1 is the smallest unmarked element, so we mark it and its two adjacent elements: [2,3,5,1,3,2].
- 2 is the smallest unmarked element, since there are two of them, we choose the left-most one, so we mark the one at index 0 and its right adjacent element: [2,3,5,1,3,2].
- 2 is the only remaining unmarked element, so we mark it: [2,3,5,1,3,2].
Our score is 1 + 2 + 2 = 5.

 

Constraints:

Java

Source file
class Solution {
    public long findScore(int[] nums) {
        List<int[]> l = new ArrayList<>();
        int n = nums.length;
        long score = 0;
        for (int i = 0; i < n; i++)
            l.add(new int[] { nums[i], i });
        // l.sort((a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]);
        l.sort((a, b) -> a[0] - b[0]); // Stable sort, so not reqd. ^
        for (int i = 0; i < n; i++) {
            int[] top = l.get(i);
            if (nums[top[1]] == 0)
                continue;
            score += top[0];
            nums[top[1]] = 0;
            if (top[1] > 0)
                nums[top[1] - 1] = 0;
            if (top[1] < n - 1)
                nums[top[1] + 1] = 0;
        }
        return score;
    }
}