zoukankan      html  css  js  c++  java
  • Leetcode 930 Binary Subarrays With Sum (双指针)

    Leetcode

    问题描述

    In an array A of 0s and 1s, how many non-empty subarrays have sum S?
    

    例子

    Example 1:
    Input: A = [1,0,1,0,1], S = 2
    Output: 4
    Explanation: 
    The 4 subarrays are bolded below:
    [1,0,1,0,1]
    [1,0,1,0,1]
    [1,0,1,0,1]
    [1,0,1,0,1]
    

    方法一

    ** Solution Java **
    ** 2ms, beats 84.49% **
    ** 44MB, beats 25.00% **
    class Solution {
        public int numSubarraysWithSum(int[] A, int S) {
            int n = A.length, res = 0, sum = 0;
            int[] map = new int[n + 1];
            map[0] = 1;
            for (int i = 0; i < n; ++i) {
                sum += A[i];
                if (sum >= S) 
                    res += map[sum - S];
                ++map[sum];
            }
            return res;
        }
    }
    

    方法二

    ** Solution Java **
    ** 1ms, beats 100.00% **
    ** 44.3MB, beats 25.00% **
    class Solution {
        public int numSubarraysWithSum(int[] A, int S) {
            return atMost(A, S) - atMost(A, S - 1);
        }
        private int atMost(int[] A, int S) {
            if (S < 0) 
                return 0;
            int res = 0, n = A.length;
            for (int i = 0, j = 0; j < n; ++j) {
                S -= A[j];
                while (S < 0) 
                    S += A[i++];
                res += j - i + 1;
            }
            return res;
        }
    }
    
  • 相关阅读:
    thinkphp 视图定义
    ThinkPHP支持模型的分层
    thinkphp 虚拟模型
    thinkphp 参数绑定
    thinkphp 自动完成
    thinkphp 自动验证
    thinkphp 子查询
    thinkphp 动态查询
    ThinkPHP sql查询
    thinkphp 统计查询
  • 原文地址:https://www.cnblogs.com/willwuss/p/12519571.html
Copyright © 2011-2022 走看看