गिनती की कॉल विंडो 'न्यूनतम' अगर इसे कम नहीं किया जा सकता है। यानी, अपनी बाएं सीमा को बढ़ाने या अपनी दाहिनी सीमा को कम करने के बाद यह अब वैध विंडो नहीं है (इसमें बी से सभी तत्व शामिल नहीं हैं)। आपके उदाहरण में तीन: [0, 2], [2, 6], [6, 7]
मान लें कि आपको पहले से ही बाईं ओर न्यूनतम विंडो [बाएं, दाएं] मिल गया है। ([0, 2] आपके उदाहरण में) अब हम इसे दाईं ओर स्लाइड करेंगे।
// count[x] tells how many times number 'x'
// happens between 'left' and 'right' in 'A'
while (right < N - 1) {
// move right border by 1
++right;
if (A[right] is in B) {
++count[A[right]];
}
// check if we can move left border now
while (count[A[left]] > 1) {
--count[A[left]];
++left;
}
// check if current window is optimal
if (right - left + 1 < currentMin) {
currentMin = right - left + 1;
}
}
यह स्लाइडिंग काम करता है क्योंकि विभिन्न 'न्यूनतम' विंडो में एक दूसरे को शामिल नहीं किया जा सकता है।
स्रोत
2010-06-21 03:50:02
इस संदर्भ में "विंडो" क्या है? –
पूर्व: ए = {1,3,2,4,5,6,1,2} बी = {1,2} इतनी छोटी खिड़की सूचकांक 6 से 7. – mousey
है क्या विंडो में बी के सभी तत्व शामिल हैं ? क्या आदेश महत्वपूर्ण है? या, आपके उदाहरण में, पद 2..6 भी एक युक्त विंडो बनाते हैं? –