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

题目链接

算法

前缀和+贪心

时间复杂度O(n)。

1.对nums数组求前缀和;

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

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

C++代码

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;
}
};

最新文章

  1. CSS3 新怎的伪类选择器
  2. vs快捷方式
  3. svn下目录说明
  4. 安装Arch Linux(桌面环境)
  5. 最简单例子图解JVM内存分配和回收
  6. JavaScript 判断用户输入的邮箱及手机格式是否正确
  7. MongoDB学习笔记06
  8. poj 1077-Eight(八数码+逆向bfs打表)
  9. Windows常用的监视数据指标
  10. Qt实现QQ界面
  11. C#基础语法
  12. 【Java基础】【03运算符&amp;if语句】
  13. Python 字节流写入文件
  14. Hadoop记录-fair公平调度队列管理
  15. UOJ67 新年的毒瘤 tarjan
  16. pd.concat/merge/join
  17. 【Spring Security】六、自定义认证处理的过滤器
  18. 套接字编程,建立连接connect,绑定套接字bind
  19. 常见异常代码oracle
  20. JavaScript有关的10个怪癖和秘密(转)

热门文章

  1. 为什么 java.util.Stack不被官方所推荐使用!
  2. JavaScript学习系列博客_7_JavaScript中的逻辑运算符、三元运算符
  3. 线程池之Executor框架
  4. 结合Excel批量操作网页,模拟登陆
  5. 第2篇scrum
  6. All in One 你想知道的 hacker 技术都在这里
  7. in文件注意事项及详细解释(转载)
  8. 医疗seo常用的图标工具
  9. OpenCV实现人脸检测
  10. Redis秒杀实战-微信抢红包-秒杀库存,附案例源码(Jmeter压测)