(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
}
相关推荐
编码忘我2 分钟前
为什么要用SpringBoot
java·后端
Frostnova丶2 分钟前
LeetCode 48 & 1886.矩阵旋转与判断
算法·leetcode·矩阵
多打代码3 分钟前
2026.3.22 回文子串
算法·leetcode·职场和发展
神舟之光4 分钟前
Java面向对象编程知识补充学习-2026.3.21
java·开发语言·学习
奶人五毛拉人一块5 分钟前
C++入门学习
开发语言·c++·函数重载·入门·nullptr
吃不饱的得可可6 分钟前
protobuf万字总结(C++)
开发语言·c++
m0_662577976 分钟前
嵌入式C++安全编码
开发语言·c++·算法
2301_810160959 分钟前
代码生成器优化策略
开发语言·c++·算法
Memory_荒年11 分钟前
SpringBoot事务:从“一键开关”到“踩坑大全”的生存指南
java·后端·spring
DJ斯特拉14 分钟前
SpringAOP
java