합이 k 인 가장 긴 부분 배열의 길이

배열 nums와 목표 값 k가 주어지면 합이 k와 같은 가장 긴 하위 배열의 길이를 찾습니다. 요구 사항을 충족하는 하위 배열이 없으면 0이 반환됩니다.

참고 :
 nums 배열의 합은 32 비트 부호있는 정수 범위 내에 있어야합니다.

예 1 :

입력 : nums = [1, -1, 5, -2, 3], k = 3
출력 : 4
설명 : 하위 배열 [1, -1, 5, -2]의 합은 3과 같습니다. 길이가 가장 깁니다.
예 2 :

입력 : nums = [-2, -1, 2, 1], k = 1
출력 : 2
설명 : 하위 배열 [-1, 2] 합계는 1과 같고 길이가 가장 깁니다.

출처 : LeetCode (LeetCode)
링크 : https://leetcode-cn.com/problems/maximum-size-subarray-sum-equals-k
저작권은 LeetCode 가 소유합니다. 상업적 재판의 경우 공식 승인에 문의하고 비상업적 재판의 경우 출처를 표시하십시오.


public class 和为k的最长子数组的长度leetcode325 {
    
    
    public static int maxSubArrayLen(int[] nums, int k) {
    
    
        Map<Integer, Integer> map = new HashMap<>(); // map在这里存储sum和对应的下标值
        map.put(0, -1);  // 这里初始化为-1,假设0,j的和为k,那么我们得到的长度就是 j-(-1)
        int sum = 0;
        int len = 0;
        for (int j = 0; j < nums.length; j++) {
    
    
            sum += nums[j];
            int preSum = sum - k;
            if (map.containsKey(preSum)) {
    
    
                len = Math.max(len, j - map.get(preSum));
            }
            if (!map.containsKey(sum)) {
    
    
                map.put(sum, j);
            }
        }
        return len;
    }

    public static void main(String[] args) {
    
    
//        System.out.println(maxSubArrayLen(new int[]{-2,-1,2,1}, 1));
        System.out.println(maxSubArrayLen(new int[]{
    
    1, -1, 5, -2, 3}, 3));
    }
}

추천

출처blog.csdn.net/liu_12345_liu/article/details/102472197