题解 | #和为K的连续子数组#

和为K的连续子数组

http://www.nowcoder.com/practice/704c8388a82e42e58b7f5751ec943a11

import java.util.*;


public class Solution {
    /**
     * max length of the subarray sum = k
     * @param arr int整型一维数组 the array
     * @param k int整型 target
     * @return int整型
     */
    /*
    public int maxlenEqualK (int[] arr, int k) {
        // write code here
        // 暴力破解
        int res = 0; // 定义一个整型变量,用于存放最终的返回结果
        int tmp = 0; // 定义一个整型变量,用于临时存放数据
        for (int i = 0; i < arr.length - 1; i++) {
            tmp = arr[i]; // 获取当前位置上的值
            for (int j = i + 1; j < arr.length; j++) {
                tmp += arr[j];
                if (tmp == k) {
                    res = Math.max(res, j - i + 1);
                }
            }
        }
        return res;
    }
    */
    
    // 使用前缀和 + 哈希的方法,解决这个问题
    public int maxlenEqualK (int[] arr, int k) {
        // 定义一个整型数组,用于存放前缀和
        int[] pre = new int[arr.length];
        // 别忘了,初始化 pre 数组
        pre[0] = arr[0];
        for (int i = 1; i < pre.length; i++) {
            pre[i] = pre[i - 1] + arr[i];
        }
        
        // 定义一个 HashMap,用于存放某个前缀和以及它所在的位置
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        hashMap.put(0, -1);
        // 定义一个整型变量,用于存放最终的返回结果
        int res = 0;
        
        // 说明:区间 [i, j] 的和等于 pre[j] - pre[i - 1]
        for (int i = 0; i < pre.length; i++) {
            
            int tmp = hashMap.getOrDefault(pre[i], -2);
            if (tmp == -2) {
                hashMap.put(pre[i], i);
            }
            
            int index = hashMap.getOrDefault(pre[i] - k, -2);
            if (index != -2) {
                res = Math.max(res, i - index);
            }
        }
        return res;
    }
}
全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务