当前位置: 首页 > article >正文

力扣 前缀和

找子数组的个数了解前缀和的基础。

前缀和大致理解为到达某个位置,前面几个数的总和,即s[i+1]=s[i]+a[i+1],可以通过一次循环获得。然后几个前缀和作差,即可得到某个位置到某个位置的和,根据map的键值对进行更新次数。

题目 

class Solution {
   public static int subarraySum(int[] nums, int k) {
        int count = 0;
        int sum = 0;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, 1); // 初始化前缀和为0的次数为1

        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];//计算前缀和
         //sum-k满足条件从某个位置到当前位置的连续子数组的和为k
         //sum[j]-sum[i]=k,k即i+1到j的元素之和
            if (map.containsKey(sum - k)) {
                //对应的次数累加
                count += map.get(sum - k);
            }
            //更新sum在map出现的次数,出现过就在原来的次数递增,没出现过初始化为1
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }

        return count;
    }
}
class Solution {
    public int subarraySum(int[] nums, int k) {
        int count = 0;
       //双指针
        for (int i = 0; i < nums.length; i++) {
            int sum = 0;//每到一个数就重置sum
            for (int j = i; j >= 0; j--) {
                sum += nums[j];//从当前的数开始往回进行累加,找组合数的和
                if (sum == k) {
                    count++;
                }
            }
        }
        return count;
    }
}

 


http://www.kler.cn/news/342216.html

相关文章:

  • Nginx 和 Lua 设计黑白名单
  • ​ceph掉电后无法启动osd,pgs unknown
  • Stable Diffusion绘画 | 签名、字体、Logo设计
  • 接口测试-day3-jmeter-2组件和元件
  • windows C++-移除界面工作线程(二)
  • 数据结构-二叉树_堆
  • 代码随想录算法训练营总结
  • 【C++ STL算法】二分查找 lower_bound、upper_bound、equal_range、binary_search
  • [Day 87] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 数据结构-栈与队列笔记
  • 关于相机的一些零碎知识点
  • 使用docsify搭建github pages页面
  • 脚本增加选项,解决问题
  • 记一次N5105 NAS功耗测量
  • 如何确保我的Java爬虫在获取Lazada商品详情时遵守API使用限制?
  • hive中的cast函数
  • SpringBoot+Vue智能社区服务小程序
  • Effective C++笔记之二十四:stack overflow
  • vue3.5系列之响应式props解构的几点技巧对比
  • 正则表达式-入门