Post

[Java] K-Radius Subarray Averages

[Java] K-Radius Subarray Averages

Feel free to leave a comment or contact me if you spot any errors or have feedback. I’m always open to learning!

K Radius Subarray Averages

LeetCode Problem #2090 šŸ”— LeetCode Link

My Solution 1

  • Time Complexity: O(n)
  • Space Complexity: O(1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
    public int[] getAverages(int[] nums, int k) {
        if (k == 0) {
            return nums;
        }

        int[] avgArr = new int[nums.length];
        long windowSum = 0;
        Arrays.fill(avgArr, -1);

        if (nums.length < 2 * k + 1) {
            return avgArr;
        }

        // calculate first half of sliding window
        for (int i = 0; i < 2 * k + 1; ++i) {
            windowSum += nums[i];
        }

        avgArr[k] = (int) (windowSum / (2 * k + 1));

        for (int i = 2 * k + 1; i < nums.length; ++i) {
            windowSum = windowSum - nums[i-(2 * k + 1)] + nums[i];
            avgArr[i-k] = (int) (windowSum / (2 * k + 1));
        }
        
        return avgArr;
    }
}

My Solution 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
    public int[] getAverages(int[] nums, int k) {
        if (k == 0) {   // edge case
            return nums;
        }

        int n = nums.length;
        int windowSize = 2 * k + 1;
        long windowSum = 0;
        int[] avgArray = new int[n];

        Arrays.fill(avgArray, -1);

        if (n < k) {
            return avgArray;
        }

        System.out.println(windowSize);
        for (int left = 0, right = 0; right < n; ++right) {
            windowSum += nums[right];
            
            // window is full
            if (right >= windowSize-1) {
                avgArray[left+k] = (int) (windowSum / windowSize);
                windowSum -= nums[left];    // substitute first element
                left++;
            }
        }

        return avgArray;
    }
}
This post is licensed under CC BY 4.0 by the author.