Algorithm & Data Structures/Programers
Lv 3. 연속 펄스 부분 수열의 합
Geisha
2024. 11. 7. 13:30
https://school.programmers.co.kr/learn/courses/30/lessons/161988?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[프로그래머스] 연속 펄스 부분 수열의 합 JAVA
문제링크1로 시작하는 누적합 배열과, -1로 시작하는 누적합 배열을 구분하여 풀이를 시작하였다.해당 인덱스 전까지 경우의 수들을 비교하며 최댓값을 탐색하였는데, 줄어드는 이중반복문이라
velog.io
어떻게 풀어야 할지 감이 잡히지 않는 문제였기에
위의 풀이를 보고 풀이 하였다.
class Solution {
public long solution(int[] sequence) {
// 2가지 배열로 나눌것 -1, 1 로 시작하는배열로
int a = 1, b = -1, size = sequence.length;
long aSum = sequence[0], bSum = sequence[0] * -1, aMin = 0 , bMin = 0, max = Long.MIN_VALUE;
for(int i = 1 ; i <= size ; i++){
a *= -1;
b *= -1;
max = Math.max(max, aSum-aMin);
max = Math.max(max, bSum-bMin);
aMin = Math.min(aMin,aSum);
bMin = Math.min(bMin,bSum);
if( i == size ) break;
aSum += sequence[i] * a;
bSum += sequence[i] * b;
}
return max;
}
}