给定一个数值s,一个定长数组num,返回该数组所有和大于7的长度最小连续子数组的长度。
例:int s = 7 ; int[] num = [1,3,5,4,2,1]; 和大于7的连续子数组有 [3,5]、[5,4]、[1,3,5]、[3,5,4]...
长度最小的连续子数组长度为2。
暴力破解是最容易想到的一种解法,然后还有一种解法我觉得比较巧妙,在这里记录下来:
采用队列的思想,将数组中的数一个个放入队列,当队列之和大于s,记录当前队列长度,然后将队列头出队列,然后再加入数组的下一个数,继续进行上述判断,最后剩下的队列内容定然是最小长度的子数组,返回最后记录的队列长度即可。
代码实现的话,不用队列,在数组头尾各加一个指针,代码如下
网友评论