僅供自己複習
借鑑李威大佬的
滑動視窗說白了也是雙指標的一種變體,不過區別在於最開始視窗裡為空(也就是說左右指標指向同乙個),然後不斷移動右邊的指標,直到滿足某條件後再收縮左邊的指標
所以一般是雙層迴圈,第一層迴圈動右指標,第二層迴圈動左指標,然後滿足某條件或終止條件就返回
自個兒總結了乙個模板
function window(s)
// 得出結果的一些**
if(...)
// 收縮左邊
....
left--
} return ...
}
1、無重複字元的最長子串
/**
* @param s
* @return
*/var lengthoflongestsubstring = function(s)
max = math.max(max, stack.length)
stack.shift()
left++
}return max
};
2、最小覆蓋子串
我在演算法總結裡也寫了這道題,不過有點不一樣
/**
* @param s
* @param t
* @return
*/var minwindow = function(s, t) , window = {}
let startindex = 0
for(let i = 0; i < t.length; i++)
needword[t[i]]++
}// 這裡的臨界判斷跟以前的用right0 && right < s.length)
window[s[right]]++
}right++
}if(needlen === 0 && right - left < len)
if(needword[s[left]] !== undefined)
window[s[left]]--
} left++
}return len === infinity ? '' : s.slice(startindex, startindex + len)
};
3、找到字串中所有字母異位詞
/**
* @param s
* @param p
* @return
*/var findanagrams = function(s, p) , window = {}
let needlen = p.length
for(let i = 0; i < p.length; i++)
needword[p[i]]++
}while(left <= right)
window[s[right]]++
}right++
}if(needlen === 0 && right - left === p.length)
if(needword[s[left]] !== undefined)
window[s[left]]--
} left++
}return res
};
4、長度最小的子陣列
以前寫的,也跟滑動視窗差不多
/**
* @param s
* @param nums
* @return
*/var minsubarraylen = function(s, nums)
sum += nums[right]
right++
while(sum >= s)
}return count === number.max_value ? 0 : count
};
重新寫的
/**
* @param s
* @param nums
* @return
*/var minsubarraylen = function(s, nums)
while(right < nums.length && sum < s)
if(sum >= s)
sum -= nums[left]
left++
}return cnt === infinity ? 0 : cnt
};
5、字串的排列
/**
* @param s1
* @param s2
* @return
*/var checkinclusion = function(s1, s2) , window = {}
let needlen = s1.length
for(let i = 0; i < s1.length; i++)
needword[s1[i]]++
}while(left <= right)
window[s2[right]]++
}right++
}if(right - left === s1.length && needlen === 0)
if(needword[s2[left]] !== undefined)
window[s2[left]]--
}left++
}return false
};
佇列及其應用(滑動視窗求最大值)
一 佇列 queue 1 佇列的特點 佇列 queue 與棧一樣,是一種線性儲存結構,它具有如下特點 note 1 佇列中的資料元素遵循 先進先出 first in first out 的原則,簡稱fifo結構。2 在隊尾新增元素,在隊頭刪除元素。佇列在棧在計算機中應用相當廣泛,包括廣度優先搜尋 c...
Flink的滾動視窗 會話視窗 滑動視窗及其應用
flink作業中的視窗 是指一種對無限資料流設定有限資料集,從而實現了處理無線資料流的機制。視窗本身只是個劃分資料集的依據,它並不儲存資料。當我們需要在時間視窗維度上對資料進行聚合時,視窗是流處理應用中經常需要解決的問題。flink的視窗運算元為我們提供了方便易用的api,我們可以將資料流切分成乙個...
TCP IP詳解 滑動視窗機制及其三種協議
在介紹滑動視窗之前先來簡單介紹一下tcp可靠傳輸原理中的停止等待協議,該協議就是傳送方每傳送乙個報文段後就停止傳送,一直等收到接收方的確認後再傳送下乙個報文段。tcp通訊是全雙工的,這裡為了方便理解,就以乙個方向為例,假設a為傳送方,b為接收方。a會有乙個傳送視窗,b有乙個接收視窗。傳送視窗表示在沒...