(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
}
相关推荐
lingggggaaaa7 分钟前
小迪安全v2023学习笔记(七十八讲)—— 数据库安全&Redis&CouchDB&H2database&未授权&CVE
redis·笔记·学习·算法·安全·网络安全·couchdb
汉克老师8 分钟前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(1、求和)
c++·蓝桥杯·蓝桥杯c++·c++蓝桥杯
程序员爱钓鱼14 分钟前
Go语言实战案例- 命令行参数解析器
后端·google·go
XXYBMOOO27 分钟前
Qt UDP 通信类详解与实现
开发语言·网络·c++·qt·网络协议·ui·udp
pusue_the_sun32 分钟前
C语言强化训练(12)
c语言·开发语言·算法
君鼎33 分钟前
More Effective C++ 条款29:引用计数
c++
圣保罗的大教堂36 分钟前
leetcode 2749. 得到整数零需要执行的最少操作数 中等
leetcode
小欣加油37 分钟前
leetcode 6 Z字形变化
c++·算法·leetcode·职场和发展
曙曙学编程42 分钟前
stm32——寄存器操作,蜂鸣器原理
c语言·c++·stm32·单片机·嵌入式硬件