zoukankan      html  css  js  c++  java
  • 和为 k 的子数组

    package leecode;

    /**
    * 剑指 Offer II 010. 和为 k 的子数组
    *
    * 给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。
    *
    * @author Tang
    * @date 2021/10/28
    */
    public class SubarraySum {


    /**
    * 利用前缀数组
    (前缀和主要适用的场景是原始数组不会被修改的情况下,频繁查询某个区间的累加和。)

    * 构建一个备忘录dp, dp[n]的值为从nums[0]加到nums[n]
    *
    *
    * @param nums
    * @param k
    * @return
    */
    public int subarraySum(int[] nums, int k) {
    int[] dpTables = new int[nums.length];
    int temp = 0;
    for(int i = 0; i < nums.length; i++) {
    temp += nums[i];
    dpTables[i] = temp;
    }

    int count = 0;

    //以元素i为首的子数组中是否存在和为k (dpTables[j] - dpTables[i-1])
    //如果存在count++
    for(int i = 0; i < nums.length; i++) {

    for(int j = i; j < nums.length; j++) {
    int sum = i == 0 ? dpTables[j] : dpTables[j] - dpTables[i - 1];
    if(sum == k) {
    count++;
    }
    }

    }

    return count;
    }


    public static void main(String[] args) {
    int[] nums = {1,1,1};
    System.out.println(new SubarraySum().subarraySum(nums, 2));

    }
    }
  • 相关阅读:
    时间计算
    DateTime
    C# trim split dataGrid
    something
    生活
    如何导入外部的源码到eclipse中
    java类中获取ServletContext的方法
    获取spring容器上下文(webApplicationContext)的几种方法
    java反射(转)
    mysql常见命令
  • 原文地址:https://www.cnblogs.com/ttaall/p/15475328.html
Copyright © 2011-2022 走看看