题目:
给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和:

子数组的长度是 k,且
子数组中的所有元素 各不相同 。
返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 0 。

子数组 是数组中一段连续非空的元素序列。

示例 1:

输入:nums = [1,5,4,2,9,9,9], k = 3
输出:15
解释:nums 中长度为 3 的子数组是:

  • [1,5,4] 满足全部条件,和为 10 。
  • [5,4,2] 满足全部条件,和为 11 。
  • [4,2,9] 满足全部条件,和为 15 。
  • [2,9,9] 不满足全部条件,因为元素 9 出现重复。
  • [9,9,9] 不满足全部条件,因为元素 9 出现重复。
    因为 15 是满足全部条件的所有子数组中的最大子数组和,所以返回 15 。
    示例 2:

输入:nums = [4,4,4], k = 3
输出:0
解释:nums 中长度为 3 的子数组是:

  • [4,4,4] 不满足全部条件,因为元素 4 出现重复。
    因为不存在满足全部条件的子数组,所以返回 0 。

提示:
1 <= k <= nums.length <= 105
1 <= nums[i] <= 105

自我反思:
当时做的时候卡壳了,不知道怎么应对重复这个限制,想着用set,试了一下又卡住了23333,之后看了一下大佬题解,才知道用hash表

好了,言归正传,思路就是,滑动窗口+hashmap,
开始先把前k个数存入hash表并计数,同时对这k个数求和,
然后每滑动一下,把新元素加到hashmap中,当前窗口的最左端的元素,删掉,每次一增一删的同时,判断一下当前的元素个数是不是k个,如果是k个说明满足题目要求,把它和结果求一下最大值,以此类推。。

class Solution {public:long long maximumSubarraySum(vector<int>& nums, int k) {unordered_map<int, int> mp;long long sum = 0;long long ans = 0;int n = nums.size();for(int i = 0;i < k;i ++) mp[nums[i]] ++, sum += nums[i];if(mp.size() == k) ans = max(ans, sum);int l = 0;for(int i = k;i < n;i ++){    mp[nums[i]] ++, sum += nums[i];auto t = mp.find(nums[l]);  // 这里t是一个整体,key valueif(t->second == 1) mp.erase(t);else t->second --;sum -= nums[l++];if(mp.size() == k) ans = max(ans, sum);}return ans;}
};

leetcode周赛第二题6230. 长度为 K 子数组中的最大和相关推荐

  1. 代码随想录算法训练营第二天|T977(有序数组的平方)、T209(长度最小的子数组)、T58(螺旋矩阵Ⅱ)

    代码随想录刷题2022.02.02 双指针法 LeetCode题目: T977(有序数组的平方) 解题要点 定义好指针变量,在循环语句中认清充当指针的变量的移动过程 注意:1)一次性定义多个变量时,只 ...

  2. LeetCode 2138. 将字符串拆分为若干长度为 k 的组

    文章目录 1. 题目 2. 解题 1. 题目 字符串 s 可以按下述步骤划分为若干长度为 k 的组: 第一组由字符串中的前 k 个字符组成,第二组由接下来的 k 个字符串组成,依此类推.每个字符都能够 ...

  3. 代码随想录算法训练营第二天|LeetCode 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II

    LeetCode 977.有序数组的平方 题目链接:977.有序数组的平方 思路: 1.先对每个数进行遍历平方,并插入新的容器中 2.对容器进行排序,返回就可以了 缺陷:开辟了新的容器空间 class ...

  4. 解题思路-LeetCode第713题:乘积小于K的子数组

    解题思路-LeetCode第713题:乘积小于K的子数组 题目描述: 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2 ...

  5. [Leedcode][JAVA][第209题][长度最小的子数组][滑动窗口][前缀和][二分查找][双指针]

    [问题描述][中等] 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的连续子数组,返回 0.示例: 输入: ...

  6. 【LeetCode】第930题——和相同的二元子数组(难度:中等)

    [LeetCode]第930题--和相同的二元子数组(难度:中等) 题目描述 解题思路 代码详解 思路一:哈希表+前缀和 思路二:滑窗 注意点 题目描述 给你一个二元数组 nums ,和一个整数 go ...

  7. 209. 长度最小的子数组(中等 数组 滑动窗口)

    209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, -, n ...

  8. leet209. 长度最小的子数组 滑动窗口

    题目: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度.如果不存在符合条件的子数组,返回 0. 示例: 输入:s = 7, ...

  9. 长度最小的子数组(力扣209)

    长度最小的子数组(力扣209) 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, -, ...

最新文章

  1. 用jk触发器构成二分频电路_实例分析,轻松掌握声控照明电路
  2. Python从头/尾删除子符串的正确操作
  3. 安卓开发环境搭建(转)
  4. Android之SlidingMenu使用和总结
  5. linux 和服务通讯,Android 的Activity和Service之间的通信
  6. Java文件操作增强工具
  7. Android开发:1-2、UI编程----TextView、EditView、Button、ImageView、ImageButton、CheckBox
  8. maven简单工具命令
  9. 智能会议系统(32)---WebRTC学习之三:录音和播放
  10. 简单的3个SQL视图搞定所有SqlServer数据库字典 (转载)
  11. [更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能、BUG、细节说明,以及升级思考过程!...
  12. oracle+erp+采购管理操作手册 - 图文 - 百度文库
  13. 关于 IoT 的发展
  14. iOS迅雷V6.01更新,变化重大丨附下载地址
  15. Tslib的触摸屏5点校准算法原理和实现
  16. APT案例调研和研究
  17. 在CSDN年收入竟达五位数?----大学生技术自媒体成长之路
  18. win11无线网络适配器出现感叹号怎么办 windows11无线网络适配器出现感叹号的解决方法
  19. 使用DISM修复系统
  20. 第1章 微处理器、微型计算机、微型计算机系统的区别

热门文章

  1. 计算机春季高考考什么时候开始报名,2021春季高考报名时间 什么时候报名
  2. Lazada假期模式如何激活/关闭?Lazada假期模式设置流程
  3. 突然玩了一下translate翻译库,笑死我了,改天找网络流行语言,挨个翻译试试
  4. KWin in KDE4
  5. 3D建模怎么学?可以自学吗?需要多久?难吗?
  6. Oracle tnsping 03505,tnsping 命令
  7. 使用OAuth 2.0访问Google API
  8. 权限控制最常见的五种方法
  9. 单细胞测序流程(一)简介与数据下载
  10. awstats linux日志分析,Linux/Centos服务器安装配置日志分析Awstats