मैं इस समस्या को हल करने के लिए कोशिश कर रहा था: https://leetcode.com/problems/longest-substring-without-repeating-characters/कोड-छोरों बनाम अगर-बाकी बयान
निम्नलिखित कोड 44 एमएस में सभी परीक्षण पारित कर दिया।
for (int i = 0; i < s.length(); i++){
if (!mp.containsKey(s.charAt(i))){
mp.put(s.charAt(i), i);
//max = Math.max(max, i-first+1);
}
else {
if (mp.get(s.charAt(i))+1>=first){
first = mp.get(s.charAt(i))+1;
}
mp.put(s.charAt(i), i);
//max = Math.max(max, i-first+1);
}
max = Math.max(max, i-first+1);
}
लेकिन निम्नलिखित कोड केवल 20 एमएस में सभी परीक्षणों को पारित कर दिया।
for (int i = 0; i < s.length(); i++){
if (!mp.containsKey(s.charAt(i))){
mp.put(s.charAt(i), i);
max = Math.max(max, i-first+1);
}
else {
if (mp.get(s.charAt(i))+1>=first){
first = mp.get(s.charAt(i))+1;
}
mp.put(s.charAt(i), i);
max = Math.max(max, i-first+1);
}
}
ऐसा कोई महत्वपूर्ण अंतर क्यों है? अधिकतम मान दोनों नमूनों में केवल एक बार बदल दिया जाता है लेकिन यदि इसे लूप के अंत में बदलने से कहीं अधिक प्रभावी होता है तो इसे बदलना कहीं अधिक प्रभावी होता है। क्या यह एक अपवाद है या कोडिंग के दौरान हम इस मानक का पालन करना चाहिए?
यह अनुमान करना मुश्किल है कि उस परिवर्तन के प्रभाव मशीन कोड पर क्या होंगे। हो सकता है कि यह अपने कूद को अलग-अलग व्यवस्थित कर दे? क्या आप असेंबली कोड डंप कर सकते हैं? – harold
क्या यह वेबसाइट उस समय से है जहां आपने कोड डाला था? शायद यह उनके दुभाषिया की देरी है? आपको इसे स्थानीय सिस्टम पर स्थानीय वीएम और एक प्रदर्शन ढांचे के साथ जांचना चाहिए – Supahupe
यह बेहद असंभव है कि दोनों कार्यक्रम अलग-अलग प्रदर्शन करेंगे ... जो आप देखते हैं वह शायद आपके कोड को सबमिट करते समय सर्वर में कितना व्यस्त था उससे संबंधित है। आपको इसे नियंत्रित वातावरण में परीक्षण करना चाहिए। – assylias