मेरे पास एक बड़ी सरणी है जिसके साथ मुझे औसत औसत की गणना करने की आवश्यकता है। मुझे लंबाई को छोड़कर रिकर्सन, कोई लूप नहीं, और कोई डॉट ऑपरेशंस का उपयोग नहीं करना है।

सरणी को अधिकतम 3 टुकड़ों तक तोड़ा जाना है, और इसे तोड़ने का तरीका है:

  • शेष 0: प्रत्येक टुकड़ा [n/3] तत्व होना चाहिए।
  • शेष १: पहला और आखिरी टुकड़ा [n/3] तत्वों को गोल किया जाना चाहिए, बीच में [n/3] तत्वों को गोल किया जाना चाहिए
  • शेष २: पहला और आखिरी टुकड़ा [n/3] तत्वों को गोल किया जाना चाहिए, बीच में [n/3] तत्वों को गोल किया जाना चाहिए

एक बार सरणी छोटे मानों को पार करने के बाद रिकर्सन को कैसे काम करना चाहिए, मैं स्टंप हो रहा हूं। मेरे पास अब तक यही है,

public static double medianAverage(double a, double b, double c) {

     if ((a < b && b < c) || (c < b && b < a)) 
         return b; 

     else if ((b < a && a < c) || (c < a && a < b)) 
         return a; 

     else if(a == c) return b;
     else if(b == c) return a;
     else if(a == b) return c;

     else
         return c;

 }

 /**
  * @return Returns median average
  */
 public static double medianHelper(int[] a, int range, int start, int end) {
     double avg = 0;
     int n = range / 3;


     // Base Cases:
     if(range == 1) return a[start];
     if(range == 2) return (a[start] + a[start + 1]) / 2.0;
     if(range == 3) return medianAverage(a[start], a[start + 1], a[start + 2]);

     if(range > 3) {
         if(range % 3 == 0) {
             double p1 = medianHelper(a, n, start, n);
             double p2 = medianHelper(a, n, n, n * 2);
             double p3 = medianHelper(a, n, n * 2, n * 3);

             return medianAverage(p1, p2, p3);
         }

         if(range % 3 == 1) {
             // TODO: Implement

         }

         if(range % 3 == 2) {
             // TODO: Implement
         }

     }

     return avg;
 }

 public static double median3(int[] a) {
     return medianHelper(a, a.length, 0, a.length);

 }

किसी भी तरह की मदद की सराहना की जाती है, धन्यवाद।

0
Symon 20 अक्टूबर 2018, 04:11

1 उत्तर

सबसे बढ़िया उत्तर
  • शेष 0 का अर्थ है range = 3n। नियमों के अनुसार, आप सरणी को [0, n], [n + 1, 2n] और [2n + 1, 3n] में विभाजित कर सकते हैं। इस मामले में प्रत्येक टुकड़े का आकार n है।
  • 1 के शेष का अर्थ range = 3n + 1 है। नियमों के अनुसार, आप सरणी को [0, n], [n + 1, 2n + 1] और [2n + 2, 3n + 1] में विभाजित कर सकते हैं। पहले और आखिरी टुकड़े का आकार n है और बीच के टुकड़े का आकार n + 1 है।
  • शेष 2 का अर्थ है range = 3n + 2। नियमों के अनुसार, आप सरणी को [0, n + 1], [n + 2, 2n + 1] और [2n + 2, 3n + 2] में विभाजित कर सकते हैं। पहले और आखिरी टुकड़े का आकार n + 1 है और बीच के टुकड़े का आकार n है।

एक बार जब आप इस तरह से सरणी को 3 टुकड़ों में विभाजित कर लेते हैं, तो आप प्रत्येक टुकड़े के माध्यिका को खोजने का पुनरावर्ती प्रयास कर सकते हैं। मैं उलझन में हूं कि आप माध्यिका के साथ क्या करना चाहते हैं, लेकिन मैं आपको इसका पता लगाने दूंगा।

0
Makoto 20 अक्टूबर 2018, 01:57