LeetCode 2593. Find Score of an Array After Marking All Elements

55 阅读1分钟

🔗 leetcode.com/problems/fi…

题目

  • 给一个数字组成的数组
  • 每次挑选未被标记的最小值,若多个值相等,选取 index 最小的数字,并标记当前和数组相邻的两个数字为 marked
  • 返回挑选数字的总和

思路

  • 排序后,模拟

代码

class Solution {
public:
    long long findScore(vector<int>& nums) {
        vector<pair<int, int>> vec;
        for (int i = 0; i < nums.size(); i++) {
            vec.push_back(make_pair(nums[i], i));
        }

        sort(vec.begin(), vec.end(), 
            [](pair<int, int> l, pair<int, int> r) { 
                if (l.first == r.first) {
                    return l.second < r.second;
                }
                return l.first < r.first;
            });

        long long score = 0;
        vector<bool> mark(vec.size());
        for (auto pair : vec) {
            int num = pair.first;
            int index = pair.second;
            if (mark[index] == false) {
                score += num;
                if (index > 0) mark[index - 1] = true;
                if (index < vec.size() - 1) mark[index + 1] = true;
            }
        }
        return score;
    }
};