您的位置:首页 > 财经 > 金融 > seo公司排行_园区网站建设服务公司_短视频关键词seo优化_网络营销策略有哪几种

seo公司排行_园区网站建设服务公司_短视频关键词seo优化_网络营销策略有哪几种

2024/12/23 1:30:22 来源:https://blog.csdn.net/2301_79184547/article/details/142965448  浏览:    关键词:seo公司排行_园区网站建设服务公司_短视频关键词seo优化_网络营销策略有哪几种
seo公司排行_园区网站建设服务公司_短视频关键词seo优化_网络营销策略有哪几种

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)

1.常规解法(会超时)

可以先将数组的所有子数组求出来,计算其中元素的值,判断与目标值的大小关系,代码如下:

    public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int len = n;boolean flag = false;for (int i = 0; i < n; i++) {int sum = 0;for (int j = i; j < n; j++) {sum += nums[j];if (sum >= target) {flag = true;len = Math.min(len, j - i + 1);break;}}}return flag ? len : 0;}

在上述代码中,使用了flag来判断是否有符合条件的子数组。

2.滑动窗口

使用该方法的前提是数组中的元素全是大于等于0的,可以使用单调性解题。

先定义两个指针left和right,这两个指针均指向第一个元素;

先让right向右移动,并用sum加上right指向的元素,当sum>=target时,可以求出符合条件的子数组的长度,这时可以让left向右移动,用sum减去left指向的元素,根据单调性,sum会越减越小,当sum<target时,left停止移动,继续上面的操作,当right指向数组外面时,最后的len就是结果。

流程图与代码如下:

    public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int len = Integer.MAX_VALUE;int sum = 0;for (int left = 0, right = 0; right < n; right++) {sum += nums[right];while (sum >= target) {len = Math.min(len, right - left + 1);sum -= nums[left++];}}return len == Integer.MAX_VALUE ? 0 : len;}

 希望读者给出建议!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com