가장 작은 연속 하위 배열 합계는 K와 같음

5430 단어 javascriptleetcode
문제 설명 #
양수 배열과 양수 'S'가 주어지면 합이 'S'보다 크거나 같은 가장 작은 연속 하위 배열의 길이를 찾습니다. 해당 하위 배열이 없으면 0을 반환합니다.

예 1:

입력: [2, 1, 5, 2, 3, 2], S=7
출력: 2
설명: 합이 '7'보다 크거나 같은 가장 작은 하위 배열은 [5, 2]입니다.

하위 배열 합계는 K와 같음 - 무차별 대입 방식:

var subarraySum = function (nums, k) {
  let n = nums.length;
  let count = 0;
  for (let i = 0; i < n; i++) {
    let sum = 0;
    for (let j = i; j < n; j++) {
      // Calculate required sum
      sum += nums[j];

      // Check if sum is equal to
      // required sum
      if (sum == k) count++;
    }
  }
  return count;
};


2) 지도/HasMap 사용:

위의 논리는 접두사 합계 배열 또는 누적 합계 배열의 원리에서 작동합니다.

SUM - K가 hasMap에 존재하는 경우 이전 항목의 일부 조합이 sum = k를 제공할 수 있음을 의미합니다.

방정식은 다음과 같습니다.

currSum - k = Val(이 val 값은 이전 조합에서 파생될 수 있는 값임)

var subarraySum = function (nums, k) {
  const obj = {};
  let res = 0;
  let sum = 0;

  for (let i = 0; i < nums.length; i++) {
    sum += nums[i];
    if (sum == k) res++;

    if (obj[sum - k]) res += obj[sum - k];

    obj[sum] ? (obj[sum] += 1) : (obj[sum] = 1);
  }
  return res;
};

좋은 웹페이지 즐겨찾기