zoukankan      html  css  js  c++  java
  • Leetcode:560. Subarray Sum Equals K

    最简单的方式,虽然oj没有说超时,但是时间还是挺多的

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

    本次的方法是遍历所有起点是最开始元素的子序列,我们起名叫sum[i],只要两个sum[i]的差值是k,则两个i作为起点和终点的子序列就符合要求。由于起点就是最开始元素,只需遍历终点,时间复杂度为O(n)。

    import java.util.Map;
    
    public class Test2 {
        public int subarraySum(int[] nums, int k) {
            int count=0;
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            map.put(0, 1);
            int sum = 0;
            for (int i = 0; i < nums.length; i++) {
                sum =sum + nums[i];
                count = count+map.getOrDefault(sum-k, 0);    //求SUM[0, i - 1] and SUM[0, j]差值
                map.put(sum,map.getOrDefault(sum,0)+1);
            }
            return count;
        }
    }
  • 相关阅读:
    线程queue
    定时器
    event模拟数据库链接
    最速下降法(梯度下降法)
    神经网络中的反向传播算法
    批量学习和在线学习的区别
    LMS算法
    粒子群算法
    遗传算法
    logistic回归
  • 原文地址:https://www.cnblogs.com/Michael2397/p/8024845.html
Copyright © 2011-2022 走看看