美文网首页
leetcode 5471 和为目标值的最大数目不重叠非空子数组

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

作者: ColdRomantic | 来源:发表于2020-08-09 23:31 被阅读0次

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

给你一个数组 nums 和一个整数 target 。
请你返回 非空不重叠 子数组的最大数目,且每个子数组中数字和都为 target 。

示例 1:
输入:nums = [1,1,1,1,1], target = 2
输出:2
解释:总共有 2 个不重叠子数组(加粗数字表示) [1,1,1,1,1] ,它们的和为目标值 2 。

关键点:子数组 (即连续的一个区间)
思路: 前缀和 + 贪心

如果能在找到满足 sum - target 的值,那么便找到一个子数组。并且为了防止重叠,前面的和全部不能再用了,直接把set清空。
(这里利用的是贪心的思想,找到一个算一个)

class Solution {
public:
    int maxNonOverlapping(vector<int>& nums, int target) {
        int ans = 0;
        int sumB = 0;
        // 记录之前的前缀和 <前缀和,下标>
        unordered_set<int> s;
        s.insert(0);
        for(int i = 0; i < nums.size(); i++){
            sumB += nums[i];
            //之前的前缀和恰好有一个匹配
            if(s.find(sumB - target) != s.end()){
               ++ans;
               // 那么之前的前缀和都丢弃
               s.clear();
               // s.insert(0);
               sumB = 0;
            }
            s.insert(sumB);
        }
        return ans;
    }
};

相关文章

  • leetcode 5471 和为目标值的最大数目不重叠非空子数组

    5471. 和为目标值的最大数目不重叠非空子数组数目 给你一个数组 nums 和一个整数 target 。请你返回...

  • Swift---LeetCode,第179题

    最大数/*给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target...

  • LeetCode热门100题算法和思路(day1)

    LeetCode01 两数之后 题目详情 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组...

  • 两数之和

    题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target ...

  • 两数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target ...

  • 力扣1. 两数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target ...

  • leetcode:第1 题

    题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target ...

  • 1.两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 ...

  • 两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 ...

  • leetcode---两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 ...

网友评论

      本文标题:leetcode 5471 和为目标值的最大数目不重叠非空子数组

      本文链接:https://www.haomeiwen.com/subject/dvzrdktx.html