题解 | #牛群保卫战#
牛群保卫战
https://www.nowcoder.com/practice/c836930db162418f87874ac5ba84726b
知识点
双指针
解题思路
首先,我们定义两个指针start和end,分别表示滑动窗口的起始位置和结束位置。我们将start和end都初始化为0,并且将当前窗口的和初始化为0。
然后我们开始遍历数组。对于每一个牛,我们将其加入当前窗口之和,并且将end指针向右移动一位。
如果当前窗口之和大于等于目标战斗力值,我们更新满足条件的最短连续牛群的长度,并尝试将start指针向右移动一位,寻找更短的满足条件的连续牛群。然后继续遍历下一个牛。
如果当前窗口之和小于目标值,我们继续将end指针向右移动一位,扩大窗口。
当遍历完所有的牛后,我们可以得到满足条件的最短连续牛群的长度。如果不存在这样的连续牛群,返回0。
Java题解
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param nums int整型一维数组
* @return int整型
*/
public int findMinSubarrayLength (int target, int[] nums) {
// write code here
int start = 0;
int end = 0;
int sum = 0;
int ans = Integer.MAX_VALUE; // 满足条件的最短连续牛群的长度
while (end < nums.length) {
// 将当前牛的战斗力值加入当前窗口的战斗力之和
sum += nums[end];
// 判断当前窗口是否满足条件
while (sum >= target) {
// 更新满足条件的最短连续牛群的长度
ans = Math.min(ans, end - start + 1);
// 将start指针向右移动一位,寻找更短的满足条件的连续牛群
sum -= nums[start];
start++;
}
// 将end指针向右移动一位,扩大窗口
end++;
}
// 如果不存在满足条件的连续牛群,返回0
if (ans == Integer.MAX_VALUE) {
return 0;
}
return ans;
}
}
查看16道真题和解析
realme公司福利 338人发布
