双指针和滑动窗模式
模式 1:常量窗(如 window = 4 或者一个整数值)
例如,给定一个 (-ve 和 +ve) 找到大小为整数数组的整数组 k.
连续窗的最大总和模式 2:(可变窗口尺寸) 模式 3:没有子数组/子字符串,其中没有子数组/子字符串 模型2可以解决这个问题
用于解决搜索等问题 sum =k 子串数量等问题。 可分解为 模式 4:找到最短/最小的窗口 模式 2 不同的方法:
示例:最大子数组 sum
public class sample{
public static void main(string args[]){
n = 10;
int arr[] = new int[n];
//brute force approach for finding the longest subarray with sum k) break; /// optimization if the sum is greater than the k, what is the point in going forward?
}
}
使用两个指针和滑动窗口的更好方法
//o(n+n) in the worst case r will move from 0 to n and in the worst case left will move from 0 0 n as well so 2n int left = 0; int right =0; int sum = 0; int maxlen = 0; while(right<arr.length sum while> k){ sum = sum-arr[left]; left++; } if(sum <p><strong>最佳方法</strong>:<br> 我们知道,如果我们找到子数组,我们将其长度存储在中 maxlen 但是在添加中 arr[right] 若总和大于 k,目前,我们通过执行来执行它 sum = sum-arr[left] 和 left++ 向左收缩。 <br> 我们知道目前最大的长度是 maxlen,如果我们继续缩小左索引,我们可能会得到另一个符合条件的子数组( maxlen 子数组,只更新 maxlen。</p> <p>当子数组不符合条件 ( </p> <pre class="brush:php;toolbar:false"> int right =0; int sum = 0; int maxLen = 0; while(right<arr.length sum if> k){// this will ensure that the left is incremented one by one (not till the sum </arr.length>
以上是两个指针和滑动窗模式的详细内容。请关注图灵教育的其他相关文章!