1 उत्तर

सबसे बढ़िया उत्तर

बस अपने मर्ज एल्गोरिदम की जांच करें। यह सही नहीं हो सकता। जस्ट इमेजिन, कि इसे 2 तत्वों वाले सरणी पर बुलाया जाता है, इसलिए आपके पास केवल 1 तत्व वाले सरणी के रूप में बाएं और दाएं होते हैं। l और r 0 हैं। तो पहले के अंदर, यदि दोनों चेक सही हैं और एक आइटम पहले तत्व को सौंपा गया है और l या r बढ़ा दिया गया है। अब पहला अगर अब ट्रिगर नहीं होगा क्योंकि l या r 1 हैं। तो सरणी का दूसरा तत्व अपरिवर्तित है।

तो मैं निम्नलिखित जांच करूँगा:

        public static void merge(String[] arr, String[] left, String[] right){
        int l = 0;
        int r = 0;
        for (int i = 0; i < arr.length; i++) {
            if (l < left.length && r < right.length) {
                if (left[l].compareTo(right[r]) <= 0)
                    arr[i] = left[l++];
                else
                    arr[i] = right[r++];;
            } else if (l < left.length) {
                arr[i] = left[l++];
            } else {
                arr[i] = right[r++];
            }
        }
    }

तो चेक मुख्य रूप से हैं: क्या बाएँ और दाएँ बाएँ में तत्व हैं? फिर बाएँ और दाएँ का सबसे छोटा मान लें। यदि दोनों में तत्व नहीं बचे हैं, तो हम जाँचते हैं कि तत्व कहाँ बचे हैं और बाएँ या दाएँ पक्ष का तत्व लेते हैं।

0
Konrad Neitzel 17 मई 2019, 18:38