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