当前位置: 首页 > news >正文

LeetCode——1695. 删除子数组的最大得分

通过万岁!!!

  • 题目:给你一个数字,里面全是int值,然后让你从中删除某个子数组,要求这个子数组中不能存在相同的数,并且要求子数组的和最大。其实这里还要求这个子数组是连续的话,我最开始以为不需要连续的。
  • 思路:这里有个关键,就是不重复,我们就需要用哈希了。我们需要遍历这个数组,往set中加,如果原本在set中了,则需要进行删除元素,直到可以加入这个元素。这个set其实就是一个子数组,但是set是无序的,所以我们需要找个变量,记录子数组中最左边的元素。这样我们就可以依次删除元素,直到当前遍历的第i个元素可以放入set。除此之外,每次我们还需要比较当前set的元素和跟之前的set元素和的最大值。最后将这个最大值返回即可。其实就是滑动窗口。
  • 技巧:滑动窗口,哈希

java代码

class Solution {public int maximumUniqueSubarray(int[] nums) {int max = nums[0];int left = 0;Set<Integer> set = new HashSet<>();set.add(max);int setSum = max;for (int i = 1; i < nums.length; i++) {while (set.contains(nums[i])) {setSum -= nums[left];set.remove(nums[left++]);}set.add(nums[i]);setSum += nums[i];max = Math.max(max, setSum);}return max;}
}
  • 总结:题目不是特别难,主要是要想到滑动窗口,我这个时间复杂度是O(n^2),最坏的情况下是前面n-1个元素都不同,但是最后一个元素跟第一个元素相同,这样其实就是for循环了两次这个数组。
http://www.dtcms.com/a/300234.html

相关文章:

  • TI MSPM0蓝牙串口通信数据包制作
  • C++11 -- emplace、包装器
  • 标准库开发和寄存器开发的区别
  • nfls dp 刷题 题解
  • AutoCAD_2025下载与保姆级安装教程
  • 【安全漏洞】防范未然:如何有效关闭不必要的HTTP请求方法,保护你的Web应用
  • cursor使用方法
  • MGER作业
  • Python 面向对象基础
  • 26考研英语词汇的逻辑笔记
  • 【PCIe 总线及设备入门学习专栏 5.1.3 -- PCIe PERST# 时序要求】
  • 从治理到共情——平台伦理的乡村共建之路
  • DeepSeek-LLM模块解析
  • 多项目终端环境初始化开发环境方案
  • 【RHCSA 问答题】第 10 章 配置和保护 SSH
  • cacti漏洞CVE-2022-46169的复现
  • 界面规范2-列表上
  • NTLite Ent Version
  • 文件IO——bmp图像处理
  • GRE、MGRE实验
  • 机器学习(重学版)基础篇(概念与评估)
  • 算子推理是什么
  • GStreamer中Pipeline(管道)
  • 速通python加密之base64
  • 《C++》模板详解
  • odoo代码分析(二)
  • 一键实现推送服务:Docker部署ntfy开源通知系统指南
  • STM32-定时器的基本定时/计数功能实现配置教程(寄存器版)
  • 数据结构习题--删除排序数组中的重复项
  • Linux内核设计与实现 - 第13章 虚拟文件系统(VFS)