一个数组中和为指定值的最长子数组

Q:一个数组中和为K的最长子数组
A:关键在于递推关系 sum[j]=sum[i]+K,这样arr[i+1]到arr[j]的和就为K。

import java.util.*;
public class 一个数组中和为指定值的最长子数组 
{
    public static int getMaxLen(int[] arr,int k)
    {
        int len=0;
        int sum=0;
        HashMap<Integer,Integer> map=new HashMap<>();
        map.put(0,-1);
        for (int i=0;i<arr.length ;i++ )
        {
            sum+=arr[i];
            if (map.containsKey(sum-k))
            {
                len=Math.max(len,i-map.get(sum-k));
            }
            if (!map.containsKey(sum))
            {
                map.put(sum,i);
            }
        }
        return len;
    }
}

类似的问题有很多,比如
Q:求和为K的倍数的最长子数组长度
A:如果sum[j]%K=sum[i]%K,这样arr[i+1]到arr[j]的和就为K的倍数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容