(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
}
相关推荐
lypzcgf1 天前
Coze源码分析-资源库-创建数据库-后端源码-安全与错误处理
数据库·安全·go·coze·coze源码分析·ai应用平台·agent平台
望获linux1 天前
【实时Linux实战系列】实时安全 C++ 模式:无异常、预分配与自定义分配器
java·linux·服务器·开发语言·数据库·chrome·tomcat
多多*1 天前
linux安装hbase(完)
java·分布式·算法·c#·wpf
new_daimond1 天前
设计模式-享元模式详解
java·设计模式·享元模式
青草地溪水旁1 天前
设计模式(C++)详解—享元模式(1)
c++·设计模式·享元模式
yacolex1 天前
MacOS IntelliJ IDEA安装使用leetcode-editor
leetcode·macos·intellij-idea
雪域迷影1 天前
使用C++编写的一款射击五彩敌人的游戏
开发语言·c++·游戏
郝学胜-神的一滴1 天前
享元模式(Flyweight Pattern)
开发语言·前端·c++·设计模式·软件工程·享元模式
软件柠檬1 天前
Java中Integer是如何应用享元模式的?
java·享元模式
charlie1145141911 天前
精读《C++20设计模式》——创造型设计模式:构建器系列
c++·设计模式·c++20·构造器模式