• 560. Subarray Sum Equals K


    一、题目

      1、审题 

       

      2、分析

        给定一个整形数组。若存在连续的序列相加和为 k ,统计这样的序列的个数。

    二、解答

      方法一、

        时间复杂度: O(N^2),空间复杂度:O(1)

        ① 将所给数组 nums,连续元素相加。 nums[i] 代表下标 i 及i之前的元素之和。

        ② 采用 count 记录满足的序列个数。

        ③ 采用循环遍历数组 nums,若 nums[i] == K。 则 count++。 采用内循环,若 nums[j] - nums[i] == k ,则 count++

        ④ 返回 count

        public int subarraySum(int[] nums, int k) {
            int count = 0;
            for (int i = 1; i < nums.length; i++) 
                nums[i] += nums[i - 1];
            
            for (int i = 0; i < nums.length; i++) {
                if(nums[i] == k)
                    count++;
                for (int j = i + 1; j < nums.length; j++) {
                    if(nums[j] - nums[i] == k)
                        count++;
                }
            }
            return count;
        }

      方法二、

        采用一个 Map 存储。 key=sum, value=count;

        时间复杂度:O(N); 空间复杂度:O(N)

        

        public int subarraySum2(int[] nums, int k) {
            int sum = 0, result = 0;
            HashMap<Integer, Integer> preSum = new HashMap<>();
            preSum.put(0, 1);
            
            for (int i = 0; i < nums.length; i++) {
                sum += nums[i];
                result += preSum.getOrDefault(sum - k, 0);
                preSum.put(sum, preSum.getOrDefault(sum, 0) + 1);
            }
            
            return result;
        }
  • 相关阅读:
    ASP.NET中级学习3
    C#面向对象学习笔记
    Javascript学习笔记
    FormView控件使用
    ASP.NET初级学习
    ListView控件是使用
    Java NIO 学习笔记一
    堆栈和托管堆 c#
    安装php7.2并且整合nginx且分开部署
    Python 安装requests和MySQLdb
  • 原文地址:https://www.cnblogs.com/skillking/p/10936383.html
Copyright © 2020-2023  润新知