[LeetCode] Maximum Absolute Sum of any SubArray (Python)

2025. 2. 26. 09:59·코딩 테스트
728x90

Problem

 

Solution

Kadane's algorithm

subArray 중 절대값 합의 최대값을 구하는 문제.

2중포문으로 구현하면 당연히 time limit 이 발생한다.

힌트 중에서 Kadane's 알고리즘을 사용하라고한다. 알아보았더니 dp 문제였다.

Kadane's 알고리즘을 간략히 설명하면

  • 일반적인 Kadane’s Algorithm은 최대 연속 부분합을 구하는 알고리즘입니다.
  • 여기서는 최대 합과 최소 합을 동시에 추적하여, 그 절댓값 중 가장 큰 값을 반환하도록 변경합니다.
  • 현재까지의 max_sum/min_sum 을 현재 num과 비교하며 갱신한다.

Kadane's 알고리즘 설명은 다른 블로그 설명을 참고했다.

https://scavienger.tistory.com/19

 

[Algorithm] Kadane's Algorithm

처음으로 소개할 알고리즘은 Kadane Algorithm 이다. Maximum Subarray Problem 을 푸는 방법중에 하나의 알고리즘이다. 실제로 해당 문제는 Brute-force 로도 풀 수 있고, Divide & Conquer 로도 풀 수 있지만 카데인

scavienger.tistory.com

 

Code

- 2중 for문으로 구현

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return abs(nums[0])

        max_sum = float('-inf')
        for i in range(len(nums)):
            current_sum = 0
            for j in range(i, len(nums)):
                current_sum += nums[j]
                max_sum = max(max_sum, abs(current_sum))
        return max_sum

 

- Kadane's Algorithm

class Solution:
    def maxAbsoluteSum(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return abs(nums[0])

        answer = 0
        current_max = 0
        current_min = 0

        for num in nums:
            # 최대 합을 구하는 Kadane's Algorithm
            current_max = max(num, current_max + num)
            # 최소 합을 구하는 Kadane's Algorithm
            current_min = min(num, current_min + num)
                
            # 최대 절댓값을 추적
            answer = max(answer, abs(current_max), abs(current_min))

        return answer

 

Complexity

Time Complexity

for문으로 배열 1번 순회 => O(N)

 

Space Complexity

상수만 사용 => O(1)

728x90
저작자표시 비영리 변경금지 (새창열림)

'코딩 테스트' 카테고리의 다른 글

[LeetCode] 1092. Shortest Common Supersequence (Python)  (0) 2025.02.28
[LeetCode] 873. Length of Longest Fibonacci Subsequence (Python)  (0) 2025.02.27
[LeetCode] 889. Construct Binary Tree from Preorder and Postorder Traversal (Python)  (0) 2025.02.23
[LeetCode] 1980. Find Unique Binary String (Python)  (0) 2025.02.22
[LeetCdoe] 1079. Letter Tile Possibilities (Python)  (0) 2025.02.20
'코딩 테스트' 카테고리의 다른 글
  • [LeetCode] 1092. Shortest Common Supersequence (Python)
  • [LeetCode] 873. Length of Longest Fibonacci Subsequence (Python)
  • [LeetCode] 889. Construct Binary Tree from Preorder and Postorder Traversal (Python)
  • [LeetCode] 1980. Find Unique Binary String (Python)
zoodi
zoodi
IT/개발 관련 지식을 기록하는 블로그입니다.
  • zoodi
    오늘의 기록
    zoodi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 후기
        • 컨퍼런스
        • 일상리뷰
      • 금융경제
        • 뉴스
        • 금융IT용어
        • 경제 및 부동산
      • 코딩 테스트
      • 스터디
        • JAVA
        • Kotlin
        • Spring
        • React, Nextjs
        • 인공지능 AI
        • Cloud & k8s
        • Kafka
        • Database
        • Network
        • Algorithm
        • Hadoop
        • LINUX
        • R Programming
        • 기타 (소공, 보안)
      • 도서
      • 기타
  • 블로그 메뉴

    • 홈
    • 스터디
    • 금융경제
    • 후기
    • 기타
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    LeetCode
    codility
    Kotlin
    코테
    네트워크
    프로그래머스
    스프링
    springboot
    리트코드
    CodingTest
    java
    스프링부트
    MySQL
    db
    금융용어
    자바
    pythoncodingtest
    코딩
    코딩테스트
    코테공부
    알고리즘
    C++
    자료구조
    kafka
    카카오코테
    Spring
    코딜리티
    쿠버네티스
    이분탐색
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
zoodi
[LeetCode] Maximum Absolute Sum of any SubArray (Python)
상단으로

티스토리툴바