Given an array of integers and a number, write a function called maxSubarraySum, which finds the maximum sum of a subarray with the length of the number passed to the function.
Note that a subarray must consist of consecutive elements from the original array. In the first example below, [100, 200, 300] is a subarray of the original array, but [100, 300] is not.maxSubarraySum([100,200,300,400], 2) // 700 maxSubarraySum([1,4,2,10,23,3,1,0,20], 4) // 39 maxSubarraySum([-3,4,0,-2,6,-1], 2) // 5 maxSubarraySum([3,-2,7,-4,1,-1,4,-2,1],2) // 5 maxSubarraySum([2,3], 3) // nullConstraints
Time Complexity - O(N)
Space Complexity - O(1)
function maxSubarraySum(arr, val){
//max값 생성
if(arr.length === 0 || arr.length < val) return null;
let maxVal = -Infinity;
let tempVal = 0;
for(let i = 0; i < val; i++){
tempVal += arr[i];
if(tempVal > maxVal) maxVal = tempVal;
}
//바보같은 실수로 처음부터 maxVal에 더하면 되지 않겠나~ 싶어 maxVal에 += arr[i] 이런식의 로직을 작성했다.
//-Infinity에 아무리 숫자를 더한다 해도 똑같이 무한을 더하지 않는 이상 계속 -Infinity인것을...
//추가로 tempVal은 설정을 해주지 않으니 0으로 시작하게 되어 왼쪽 arr 값을 빼면 -가 되어 계산이 맞지 않았다.
for(let i = 0; i<arr.length; i++){
//더한 값의 가장 왼쪽 값을 빼고 다음 오른쪽 값을 더한다.
tempVal = tempVal - arr[i] + arr[val + i];
//데이터를 비교하고 더 큰 값을 max로 세팅한다.
if(tempVal > maxVal) maxVal = tempVal;
}
return maxVal;
}