Gidhub BE Developer

LeetCode : 2090. K Radius Subarray Averages

2023-08-27
goodGid

2090. K Radius Subarray Averages

Problem

You are given a 0-indexed array nums of n integers, and an integer k.
The k-radius average for a subarray of nums centered at some index i with the radius k is the average of all elements in nums between the indices i - k and i + k (inclusive). If there are less than k elements before or after the index i, then the k-radius average is -1.
Build and return an array avgs of length n where avgs[i] is the k-radius average for the subarray centered at index i.

Example

Input: nums = [7,4,3,9,1,8,5,2,6], k = 3
Output: [-1,-1,-1,5,4,4,-1,-1,-1]

[1] Code (23. 08. 27)

Need to Retry

// Runtime: 4 ms
// Memory Usage: 60.2 MB
// Ref : https://leetcod e.com/submissions/detail/1032957510
class Solution {
    public int[] getAverages(int[] nums, int k) {
        long sum = 0; // [1]
        int size = nums.length;
        
        int[] ans = new int[size];
        for (int i=0; i<size; i++) {
            ans[i] = -1;
        }
        
        for (int i=0; i<k*2 && i<size; i++) {
            sum += nums[i];
        }
        
        for (int i=k; i<size-k && i<size; i++) {
            sum += nums[i+k];
            ans[i] = (int) (sum / (k*2+1)); // [2]
            sum -= nums[i-k];
        }
        
        return ans;
    }
}
  • 이번에(=230827) 문제를 풀기 전에

    230620에 문제를 풀었는데

    정말 똑같은 실수를 하였고 그래서 문제를 틀렸다.

  • [1] : int로 선언을 했었는데 long으로 해야 한다.

Constraints:
n == nums.length
1 <= n <= 105
0 <= nums[i], k <= 105
  • [2] : int로 형변환을 했는데 sum에만 적용이 되도록 하는 실수를 범했다.
// AS-IS
ans[i] = (int) sum / (k*2+1);

Review

  • int형 자리를 벗어나는 조건에 대해 아무렇지 않게 넘기면 틀릴 수 있다.

Reference


Recommend

Index