[알고리즘] sliding window

Jade·2023년 2월 15일
1

알고래즘

목록 보기
20/20
post-thumbnail

💡 maxSubarraySum

maxSubarraySum 함수는 배열과 정수를 인자로 받는다. 인자로 받은 정수 만큼의 연속한 수를 배열 내에서 더할 때, 가장 큰 숫자를 반환한다.

//시간 복잡도 O(n^2)
function maxSubarraySum(arr, num) {
  if ( num > arr.length){
    return null;
  }
  var max = -Infinity;
  for (let i = 0; i < arr.length - num + 1; i ++){
    temp = 0;
    for (let j = 0; j < num; j++){
      temp += arr[i + j];
    }
    if (temp > max) {
      max = temp;
    }
  }
  return max;
}
//시간 복잡도 O(n)
//for문이 두 개이지만 중첩되지 않았기 때문에 더 적은 시간 복잡도가 나온다

function maxSubarraySum(arr, num){
  let maxSum = 0;
  let tempSum = 0;
  if (arr.length < num) return null;
  
  //맨 처음 인덱스 0부터 num-1 까지의 배열 요소를 더한 것을 maxSum에 할당한다
  for (let i = 0; i < num; i++) {
    maxSum += arr[i];
  }
  
  //tempSum에 maxSum을 할당하고, for문 내부에서 더하는 범위를 한칸씩 이동시킬 때마다 새로 더하는 게 아니라 
 //이전 인덱스 하나에 해당하는 값을 빼고, 새롭게 더해진 인덱스에 해당하는 값만 더한다. 
  //arr가 [1,2,3,4]이고 num이 3이면
  //tempSum은 1+2+3에서 1+2+3-1+4로 바뀌는 것 
  tempSum = maxSum;
  for (let i = num; i < arr.length; i++) {
    tempSum = tempSum - arr[i - num] + arr[i];
    maxSum = Math.max(maxSum, tempSum);
  }
  return maxSum;
}
profile
키보드로 그려내는 일

0개의 댓글