(LeetCode 每日一题) 1695. 删除子数组的最大得分 (哈希表+双指针)

题目:1695. 删除子数组的最大得分

思路:哈希表+双指针,时间复杂度0(n)。

哈希表维护双指针内元素出现的情况,当右指针指向的元素数量大于1时,移动左指针,直到数量为1即可。细节看注释

C++版本:

cpp 复制代码
class Solution {
public:
    int maximumUniqueSubarray(vector<int>& nums) {
    	// 哈希表维护双指针内元素出现的情况
        unordered_map<int,int> mp;
        int n=nums.size();
        int sum=0,mx=0;
        for(int i=0,j=0;j<n;j++){
            sum+=nums[j];
            mp[nums[j]]++;
            // cout<<mp[nums[j]]<<":";
            // 当右指针指向的元素数量大于1时
            while(mp[nums[j]]>1){
            	// 移动左指针,直到数量为1即可
                mp[nums[i]]--;
                sum-=nums[i];
                i++;
            }
            // cout<<i<<":"<<j<<endl;
            mx=max(mx,sum);
        }
        return mx;
    }
};

JAVA版本:

java 复制代码
class Solution {
    public int maximumUniqueSubarray(int[] nums) {
        Map<Integer,Integer> mp =new HashMap<>();
        int n=nums.length;
        int sum=0,mx=0;
        for(int i=0,j=0;j<n;j++){
            sum+=nums[j];
            mp.merge(nums[j],1,Integer::sum);
            // cout<<mp[nums[j]]<<":";
            while(mp.get(nums[j])>1){
                mp.merge(nums[i],-1,Integer::sum);
                sum-=nums[i];
                i++;
            }
            // cout<<i<<":"<<j<<endl;
            mx=Math.max(mx,sum);
        }
        return mx;
    }
}

GO版本:

go 复制代码
func maximumUniqueSubarray(nums []int) int {
    mp:=map[int]int{}
    sum,mx:=0,0
    n:=len(nums)
    for i,j:=0,0;j<n;j++ {
        sum+=nums[j]
        mp[nums[j]]++
        for mp[nums[j]]>1 {
            mp[nums[i]]--
            sum-=nums[i]
            i++
        }
        mx=max(mx,sum)
    }
    return mx
}
相关推荐
皮皮林5519 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河10 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
地平线开发者10 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮11 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者11 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考11 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
桦说编程12 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅14 小时前
Java面向对象入门(类与对象,新手秒懂)
java
HXhlx14 小时前
CART决策树基本原理
算法·机器学习