zoukankan      html  css  js  c++  java
  • Leetcode: Maximum Size Subarray Sum Equals k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If there isn't one, return 0 instead.
    
    Example 1:
    Given nums = [1, -1, 5, -2, 3], k = 3,
    return 4. (because the subarray [1, -1, 5, -2] sums to 3 and is the longest)
    
    Example 2:
    Given nums = [-2, -1, 2, 1], k = 1,
    return 2. (because the subarray [-1, 2] sums to 1 and is the longest)
    
    Follow Up:
    Can you do it in O(n) time?

    Like the other subarray sum problems Lintcode: Subarray Sum closest

    Use a HashMap to keep track of the sum from index 0 to index i, use it as the key, and use the current index as the value

    build the hashmap: scan from left to write, if the current sum does not exist in the hashmap, put it in. If the current sum does exist in Hashmap, do not replace or add to the older value, simply do not update. Because this value might be the left index of our subarray in later comparison. We are looking for the longest subarray so we want the left index to be the smaller the better. 

    Every time we read a number in the array, we check to see if map.containsKey(num-k), if yes, try to update the maxLen.

     1 public class Solution {
     2     public int maxSubArrayLen(int[] nums, int k) {
     3         if (nums==null || nums.length==0) return 0;
     4         HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
     5         map.put(0, -1);
     6         int sum = 0;
     7         int maxLen = Integer.MIN_VALUE;
     8         for (int i=0; i<nums.length; i++) {
     9             sum += nums[i];
    10             if (!map.containsKey(sum)) {
    11                 map.put(sum, i);
    12             }
    13             if (map.containsKey(sum-k)) {
    14                 int index = map.get(sum-k);
    15                 maxLen = Math.max(maxLen, i-index);
    16             }
    17         }
    18         return maxLen==Integer.MIN_VALUE? 0 : maxLen;
    19     }
    20 }
  • 相关阅读:
    配置webstorm使用supervisor时出现 /usr/bin/env: node: 没有那个文件或目录 解决方法
    解决Ubuntu不能挂载ntfs格式硬盘
    git远程操作
    git重写历史记录
    git撤销命令
    git查看历史命令
    git分支管理和stash
    git的忽略文件和删除文件操作
    homebrew学习(四)之取消homebrew自动更新
    homebrew学习(三)之homebrew命令
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5104280.html
Copyright © 2011-2022 走看看