सरणी में i
प्रत्येक स्थिति के लिए N < 10 000
तत्वों की एक श्रृंखला को देखते हुए, (सबसे कुशल तरीके से) कितनी लगातार तत्व इसके बाएं से शुरू होते हैं (यानी स्थिति से i-1
से 0
) array[i]
के छोटे या बराबर हैं।सरणी में प्रत्येक आइटम से पहले कितने तत्व छोटे होते हैं
यहाँ एक उदाहरण है:
Array: 4 3 6 1 1 2 8 5 9
Res: 0 0 2 0 1 2 6 0 8
(pos 0 (element 4) -> 0 consecutive elements before it,
pos 1 (element 3) -> 0 consecutive elements before it smaller than 3 (4>3)
pos 2 (element 6) -> 2 consecutive elements before it smaller than 6 (4,3)
and so on..
)
मैं इसे एक गतिशील प्रोग्रामिंग सवाल है, क्योंकि यह समस्या 'सबसे कारगर तरीका' में कहते हैं और घोल में वहाँ एक O(n)
समाधान का कहना है ग्रहण करेंगे।
O(n^2)
समाधान सरल है, दो loops, तत्वों की गिनती।
इस बारे में मेरा विचार है कि 0(n)
कैसे। एक ग्रहण करेंगे:
for (int i = 1; i < array.Length; i++) {
if (array[i-1] > array[i])
{
c [i] = 0;
}
else {
c [i] = c [i - 1] + MAGIC_FORMULA;
}
}
जाहिर है, अगर मैं अगले एक से अधिक एक तत्व मिल जाए, परिणाम स्पष्ट रूप से (बाईं ओर कोई संख्या यह की तुलना में छोटे) 0 है। लेकिन पिछले परिणाम मुझे क्या बताता है ताकि मैं गतिशील प्रोग्रामिंग का उपयोग कर सकूं? मुझे उस मामले के लिए कोई पुनरावृत्ति नहीं मिल रही है। साथ ही, पूरे समाधान के लिए O(n)
होने के लिए, उस सूत्र को O(1)
में प्राप्य होना होगा, है ना? हैशसेट का उपयोग करने के बारे में सोचा, लेकिन इसे समझ नहीं सका। कडेन के एल्गोरिदम के कुछ संशोधित संस्करण का उपयोग करने के बारे में सोचा, लेकिन कोई भाग्य नहीं।
मैं O(n)
समाधान को समझने के लिए मर रहा हूं। मैंने पूरे दिन O(n)
समाधान के बारे में सोचा है और मैं वास्तव में अटक गया हूं।
मैं मूल नहीं हूं इसलिए इस प्रश्न को बेहतर बनाने में कोई मदद/बेहतर समझने योग्य की सराहना की जाएगी।
मुझे खेद है, लेकिन मुझे जवाब समझने में कठिनाई हो रही है। क्या आप कृपया एक छोटा सा उदाहरण दे सकते हैं? आम तौर पर मेरे लिए कंक्रीट से अमूर्त तक जाना आसान होता है। –
@RustinAlexandru: अगर यह अभी भी अस्पष्ट है तो कृपया मुझे बताएं। असल में यह एक कार्यान्वयन प्रदान करना आसान होगा, लेकिन मैंने आपको ऐसा करने दिया। ;) – md5
धन्यवाद आदमी, यह सही है। कार्यान्वयन कोई समस्या नहीं होगी। यहां एल्गोरिदम की मेरी गलतफहमी है। 'i = 2: - एस = [0, 1]: सी [2]> = सी [1] -> पॉप एस = [0]: सी [2]> = सी [0] -> पॉप एस = []: ans [2] = -1 - पुश i: s = [2] 'जवाब नहीं देना चाहिए [2] = 2 4 <3<6 <=> से लगातार 2 पदों को सी [2] से छोटा है? –