[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.