今天的滑动窗口是比较奇特的,仅仅是为了做题而滑动,K是作为判断.

    1. public int longestOnes(int[] A, int K) {
    2. int right=0,left=0;
    3. while (right<A.length){
    4. //右端为零,假设利用K的剩余将0变成1
    5. if(A[right++]==0)
    6. //每执行一次,K剩余减少
    7. K--;
    8. //此时K<0,左端为零,整个窗口长度不变,整体向右滑动
    9. //K<0只能放在前面,否则left++执行,陷入死循环
    10. if(K<0&&A[left++]==0)
    11. //右端自K<0后每一次减少,都在此步添加到K中
    12. K++;
    13. }
    14. return right-left;
    15. }

    窗口只会扩大或者平移,不会缩小,所以最后r - l就是最大窗口长度,只是窗口的起始位置可能并不是所求子数组的起始位置。