(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
}
相关推荐
MC丶科4 分钟前
【SpringBoot常见报错与解决方案】端口被占用?Spring Boot 修改端口号的 3 种方法,第 3 种 90% 的人不知道!
java·linux·spring boot
怪兽20148 分钟前
Redis常见性能问题和解决方案
java·数据库·redis·面试
zz-zjx9 分钟前
JVM 内存结构与 GC 机制详解( 实战优化版)
java·jvm·tomcat
nvvas21 分钟前
Android Studio JAVA开发按钮跳转功能
android·java·android studio
小O的算法实验室29 分钟前
2022年ASOC SCI2区TOP,基于竞争与合作策略的金字塔粒子群算法PPSO,深度解析+性能实测,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
深耕AI38 分钟前
MFC + OpenCV 图像预览显示不全中断问题解决:GDI行填充详解
c++·opencv·mfc
CV工程师丁Sir38 分钟前
Rokid设备连接全解析:蓝牙与Wi-Fi通信源码深度剖析
java
zoyation40 分钟前
多线程简介和在JAVA中应用
java·开发语言
南莺莺41 分钟前
邻接矩阵的基本操作
数据结构·算法··邻接矩阵
余辉zmh1 小时前
【C++篇】:ServiceBus RPC 分布式服务总线框架项目
开发语言·c++·rpc