js css html

【算法题】2593. 标记所有元素后数组的分数

2023-04-17  本文已影响0人  程序员小2

题目:

给你一个数组 nums ,它包含若干正整数。

一开始分数 score = 0 ,请你按照下面算法求出最后分数:

从数组中选择最小且没有被标记的整数。如果有相等元素,选择下标最小的一个。
将选中的整数加到 score 中。
标记 被选中元素,如果有相邻元素,则同时标记 与它相邻的两个元素 。
重复此过程直到数组中所有元素都被标记。
请你返回执行上述算法后最后的分数。

示例 1:

输入:nums = [2,1,3,4,5,2]
输出:7
解释:我们按照如下步骤标记元素:

输入:nums = [2,3,5,1,3,2]
输出:5
解释:我们按照如下步骤标记元素:

提示:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6

java代码:

class Solution {
    public long findScore(int[] nums) {
        int n = nums.length;
        var ids = new Integer[n];
        for (int i = 0; i < n; ++i) ids[i] = i;
        Arrays.sort(ids, (i, j) -> nums[i] - nums[j]);

        long ans = 0;
        var vis = new boolean[n + 2]; // 保证下标不越界
        for (int i : ids)
            if (!vis[i + 1]) { // 避免 -1,偏移一位
                vis[i] = vis[i + 2] = true;
                ans += nums[i];
            }
        return ans;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读