java 最大尺寸子阵列和等于k(和为k的最长连续子数组)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 最大尺寸子阵列和等于k(和为k的最长连续子数组)相关的知识,希望对你有一定的参考价值。

public int maxLenSumToK_NoMap(int [] nums,int k){
    int len = nums.length;
    int [] sums = new int[len];
    sums[0] = nums[0];
    for(int i=1; i < len; i++){
        sums[i] = sums[i-1]+nums[i];  //先从第一个往后累加
    }
    int max = Integer.MIN_VALUE;
    for(int i = 0; i < len; i++){
        for(int j = i; j < len; j++){
            if(sums[j]-sums[i]==k) max = Math.max(max,j-i); //判断所有的子数组之和等不等于k,并记录最大长度子数组
        }
    }
}
public int maxLenSumToK_WithMap(int [] nums,int k){
    int len = nums.length;
    int [] sums = new int[len];
    sums[0]=nums[0];
    int max = Integer.MIN_VALUE;
    for(int i = 1 ; i < len; i++){
        sums[i] = sums[i-1]+nums[i];
    }
    Map<Integer,Integer> map = new HashMap<>();  //用map来保存累加值和下表索引之间的对应关系
    for(int i = 0; i < len; i++){
        int dis = sums[i]-k;//求当前累加值和k之间的差距
        int j = map.get(dis);  //去map中查找有没有已经放入了这个期待的差距值,有的话拿到其索引值用于更新max值
        if(j!=null) max = Math.max(max,j-i);  //更新max
        if(!map.get(sums[i])) map.put(sums[i],i); //如果没有该累加值则加入,如果有的话放入的是前面的因为这样可以max更大。
    }
    return max;
}

以上是关于java 最大尺寸子阵列和等于k(和为k的最长连续子数组)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode——长度最小的子数组 / 最短无序连续子数组 / 和为k的连续子数组

java 325.最大大小子阵列总和等于k(#)。java

java 325.最大大小子阵列总和等于k(#)。java

java 325.最大大小子阵列总和等于k(#)。java

java 325.最大大小子阵列总和等于k(#)。java

java 325.最大大小子阵列总和等于k(#)。java