최대 하위 배열 합계🤖
5287 단어 algorithmsjavascript
이 문제는 배열에서 연속 숫자의 가장 큰 합을 구하도록 요청합니다.
let nums = [ -3, 1, -4, 1, 2, 1]
// solution -> 4 ( from 1,2,1 subarray)
이 경우 접근 방식은 이전 요소의 숫자 합계를 누적하는 것을 포함하며 현재 요소를 포함하는 새 합계와 이전 합계 사이에서 가장 높은 합계를 확인합니다. 따라서 첫 번째 하위 배열
sum
은 다음 요소의 합계를 누적하는 데 사용되는 배열의 첫 번째 값일 뿐입니다.sum = nums[0]
기본 경우에는 더 이상 반복할 요소가 없으므로 루프를 건너뛰어 첫 번째 요소만 반환합니다.
그러나 반복할 요소가 더 있으면 배열이 끝날 때까지 두 번째 요소(인덱스 1)부터 시작합니다. 인덱스 1에서 시작하면 현재 요소를 첫 번째 루프의 이전 요소와 비교할 수 있습니다.
if (nums[i - 1] > 0) {
// only if the previous accumulation sum (previous element) is positive
nums[i] += nums[i - 1]; // accumulate current element by adding last to current
}
nums[i]
와 nums[i-1]
에서 이전 요소의 합을 누적한 후 현재 합( nums[i]
)을 지금까지 가장 높은 합( sum
)과 비교할 수 있습니다.sum = Math.max(nums[i], sum)
첫 번째 루프
sum
에서 배열의 첫 번째 요소가 되고 이후에는 지금까지 찾은 가장 높은 합이 됩니다.전체 알고리즘:
const maxSubArray = (nums) => {
let sum = nums[0];
for (let i = 1; i < nums.length; i++) {
// starts at index one to compare and acculumate
if (nums[i - 1] > 0) {
// if the accumulation sum is positive
nums[i] += nums[i - 1];
// accumulate current element by adding current to last
}
sum = Math.max(nums[i], sum);
// save highest number either current sum of previous higher sum
}
return sum;
};
검토하기 위해 배열을 반복하고 이전에 누적된 합계가 양수인지 확인하고 true이면 현재 요소를 추가하는지 확인합니다. 마지막으로 전체 배열을 반복한 후 현재 합계를
Math.max
로 지금까지 가장 높은 합계와 비교하여 답을 sum
반환합니다.어떤 생각/아이디어든지 자유롭게 연락하세요!
Reference
이 문제에 관하여(최대 하위 배열 합계🤖), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/santispavajeau/maximum-subarray-sum-2c28텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)