[LeetCode] Range Sum Query - Immutable

아르당·2026년 1월 2일

LeetCode

목록 보기
69/94
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

정수 배열 nums가 주어졌을 때, 다음과 같은 유형의 여러 쿼리를 처리해라.

  1. 인덱스 left와 rigth 사이(left <= right)에 있는 nums의 요소들의 합을 계산해라.

NumArray 클래스를 구현해라.

  • NumArray(int[] nums)는 정수 배열 nums로 객체를 초기화한다.
  • int sumRange(int left, int right)는 인덱스 left와 right 사이(즉, nums[left] + nums[left + 1] + ... + nums[right])의 요소들의 합을 반환한다.

Example

Input
["NumArray", "sumRange", "sumRange", "sumRange"]

[[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]

Output
[null, 1, -1, -3]

Explanation
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return (-2) + 0 + 3 = 1
numArray.sumRange(2, 5); // return 3 + (-5) + 2 + (-1) = -1
numArray.sumRange(0, 5); // return (-2) + 0 + 3 + (-5) + 2 + (-1) = -3

Constraints

  • 1 <= nums.length <= 10^4
  • -10^5 <= nums[i] <= 10^5
  • 0 <= left <= right < nums.length
  • sumRange로 최대 10^4번의 호출이 된다.

Solved

class NumArray {

    private int[] prefixSum;

    public NumArray(int[] nums) {
        int n = nums.length;
        prefixSum = new int[n + 1];
        prefixSum[0] = 0;

        for(int i = 1; i <= n; i++){
            prefixSum[i] = prefixSum[i - 1] + nums[i - 1];
        }
    }
    
    public int sumRange(int left, int right) {
        return prefixSum[right + 1] - prefixSum[left];
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray obj = new NumArray(nums);
 * int param_1 = obj.sumRange(left,right);
 */
profile
내 마음대로 코드 작성하는 세상

0개의 댓글