前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode1546题解【前缀和+贪心】

leetcode1546题解【前缀和+贪心】

作者头像
_DIY
发布2020-09-22 10:55:18
3380
发布2020-09-22 10:55:18
举报

leetcode1546.和为目标值的最大数目不重叠非空子数组数目

题目链接

算法

前缀和+贪心

时间复杂度O(n)。

1.对nums数组求前缀和;

2.在求前缀和过程中将前缀和sum插入到set集合中,每次都在set集合中寻找sum-target是否存在,如果存在,说明存在这么一个子数组,满足该子数组中的数字和等于target;

3.在set集合中找到sum-target后,就记录一次,同时需要将sum清零并且将set集合清空,目的是让符合条件的子数组不重叠。

C++代码

代码语言:javascript
复制
class Solution {
public:
    int maxNonOverlapping(vector<int>& nums, int target) {
        int len = nums.size();
        int sum = 0, res = 0;
        set<int> hs;    //记录前缀和
        hs.insert(0);
        for(int i = 0; i < len; i++){
            sum += nums[i];
            if(hs.find(sum - target) != hs.end()){
                sum = 0;
                hs.clear();     //为了不让子数组重叠,需要清空数组
                res++;  
            }   
            hs.insert(sum);
        }
        return res;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • leetcode1546.和为目标值的最大数目不重叠非空子数组数目
  • 算法
  • C++代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档