Leetcode Java Number of Subarrays with Bounded Maximum

업데이트:

문제

Link

코드

class Solution {

  public int numSubarrayBoundedMax(int[] nums, int left, int right) {
    return this.getCount(nums, right) - this.getCount(nums, left - 1);
  }

  private int getCount(int[] nums, int bound) {
    int total = 0;
    int count = 0;
    for (int num : nums) {
      count = num <= bound ? count + 1 : 0;
      total += count;
    }
    return total;
  }

}

결과

Link

설명

  1. nums 내 값을 이용하여 [left, right] 범위에 존재하는 연속된 숫자들을 이용한 부분 배열의 수를 구하는 문제이다.

  2. nums 내 bound까지 부분 배열의 수를 계산할 getCount(int[] nums, int bound) 메서드를 정의한다.
    • 부분 배열의 수를 계산할 변수를 정의한다.
      • total은 bound까지 부분 배열의 총 개수를 저장할 변수로, 0으로 초기화한다.
      • count는 nums 내 연속된 값들을 이용한 부분 배열의 숫자를 저장할 변수로, 0으로 초기화한다.
    • nums의 값들을 차례대로 num에 넣어 아래를 수행한다.
      • num이 bound 이하인 경우 count를 증가시키고, 초과인 경우 범위를 넘었으므로 count를 0으로 초기화한다.
      • total에 num 위치까지 부분 배열의 수를 저장한 count를 더해준다.
    • 반복이 완료되면 bound까지 부분 배열의 수를 저장한 total을 반환한다.
  3. 2번에서 정의한 getCount(int[] nums, int bound) 메서드를 이용하여 right까지 범위의 부분 배열의 수에 left까지 범위의 부분 배열의 수를 뺀 값을 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기