领扣LintCode算法问题答案-1168. 数组评分
目录
- 1168. 数组评分
-
- 描述
- 说明
- 样例 1:
- 题解
- 鸣谢
1168. 数组评分
描述
有一个数组 nums,以及三个正整数 k,u,l。
对于 nums 的所有长为 k 的子段,如果它的总和小于 u ,就得 1 分,如果它的总和大于 l ,就扣 1 分。
请求出最终能获得多少分?
- nums 的长度为 n ,1 <= n <= 105?? 。
- nums?i 为 nums 中的元素,0 <= numsi <= 105。
- 1 <= k <= n。
- 1 <= u <= l <= 1010 。
- 最后的得分可以是负数。
说明
下列样例中,[0, 1, 2, 3, 4] 所有的长为 2 的子段分别是[0, 1], [1, 2], [2, 3], [3, 4],它们的和分别为1,3,5,7。其中 1<2,加一分,7>5,扣一分。总计0分。
样例 1:
样例输入:
nums = [0, 1, 2, 3, 4]
k = 2
u = 2
l = 5
样例输出:
0
题解
public class Solution {
/*** @param nums: the array to be scored.* @param k: the requirement of subarray length.* @param u: if the sum is less than u, get 1 score.* @param l: if the sum is greater than l, lose 1 score.* @return: return the sum of scores for every subarray whose length is k.*/public int arrayScore(List<Integer> nums, int k, long u, long l) {
// write your code here.if (nums.size() < k) {
return 0;}int ret = 0;Iterator<Integer> preIterator = nums.iterator();Iterator<Integer> iterator = nums.iterator();long value = 0;for (int i = 0; i < k; i++) {
value += iterator.next();}if (value < u) {
ret++;}if (value > l) {
ret--;}while (iterator.hasNext()) {
value -= preIterator.next();value += iterator.next();if (value < u) {
ret++;}if (value > l) {
ret--;}}return ret;}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。