# Window Sum

ID: 604; easy

## Solution 1 (Java)

``````public class Solution {
/**
* @param nums: a list of integers.
* @param k: length of window.
* @return: the sum of the element inside the window at each moving.
*/
public int[] winSum(int[] nums, int k) {
if (nums == null || nums.length == 0 || nums.length < k)
return new int[0];
int[] res = new int[nums.length - k + 1];
int windowSum = 0;
for (int i = 0; i < k; i++) {
windowSum += nums[i];
}
for (int i = 0; i + k < nums.length; i++) {
res[i] = windowSum;
windowSum = windowSum - nums[i] + nums[i + k];
}
res[res.length - 1] = windowSum;
return res;
}
}``````

## Solution 2 (Java)

``````public class Solution {
/**
* @param nums: a list of integers.
* @param k: length of window.
* @return: the sum of the element inside the window at each moving.
*/
public int[] winSum(int[] nums, int k) {
if (nums == null || nums.length == 0 || nums.length < k)
return new int[0];
int[] res = new int[nums.length - k + 1];
for (int i = 0; i < k; i++) {
res[0] += nums[i];
}
for (int i = 1, j = k; j < nums.length; i++, j++) {
res[i] = res[i - 1] - nums[i - 1] + nums[j];
}
return res;
}
}``````

### Notes

• A better refactored version than Solution 1.

• Both solutions have the idea of memoization in mind.

Last updated