Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में अधिकतम औसत सबरे II

मान लीजिए कि हमारे पास n पूर्णांकों के साथ एक सरणी है, हमें उस सन्निहित उप-सरणी को खोजना है जिसकी लंबाई k से अधिक या उसके बराबर है जिसका अधिकतम औसत मान है। हमें अधिकतम औसत मूल्य ज्ञात करना है।

इसलिए, यदि इनपुट [1,12,-5,-6,50,3], k =4 जैसा है, तो आउटपुट 12.75 होगा, क्योंकि जब लंबाई 5 होती है, तो अधिकतम औसत मान 10.8 होता है, जब लंबाई 6 होती है। , अधिकतम औसत मूल्य 9.16667 है। इस प्रकार आउटपुट 12.75 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन को परिभाषित करें ठीक (), यह x, एक सरणी संख्या, k,

    लेगा
  • n :=अंकों का आकार

  • आकार की एक सरणी गिरफ्तारी परिभाषित करें:n.

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • गिरफ्तारी [i] :=अंक [i] - x

  • योग :=0, अंतिम :=0

  • इनिशियलाइज़ करने के लिए मैं :=0, जब i

    • योग:=योग + गिरफ्तारी [i]

  • यदि योग>=0, तो -

    • सही लौटें

  • प्रारंभ करने के लिए i :=0, j :=k, जब j

    • अंतिम:=अंतिम + गिरफ्तारी[i]

    • योग:=योग + गिरफ्तारी [जे]

    • यदि अंतिम <0, तो -

      • योग :=योग - अंतिम

      • अंतिम:=0

    • यदि योग>=0, तो -

      • सही लौटें

  • झूठी वापसी

  • मुख्य विधि से निम्न कार्य करें -

  • रेट :=0, लो :=-इन्फ, हाई :=इंफ

  • जबकि उच्च-निम्न> 10^-5, करें

    • मध्य:=निम्न + (उच्च-निम्न)/2

    • यदि ठीक (मध्य, अंक, के) सत्य है, तो -

      • कम :=मध्य

      • रिट :=मध्य

    • अन्यथा

      • उच्च :=मध्य

  • वापसी रिट

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool ok(double x, vector <int>& nums, int k){
      int n = nums.size();
      double arr[n];
      for (int i = 0; i < n; i++) {
         arr[i] = nums[i] - x;
      }
      double sum = 0;
      double last = 0;
      for (int i = 0; i < k; i++) {
         sum += arr[i];
      }
      if (sum >= 0)
      return true;
      for (int i = 0, j = k; j < n; i++, j++) {
         last += arr[i];
         sum += arr[j];
         if (last < 0) {
            sum -= last;
            last = 0;
         }
         if (sum >= 0)
         return true;
      }
      return false;
   }
   double findMaxAverage(vector<int>& nums, int k) {
      double ret = 0;
      double low = INT_MIN;
      double high = INT_MAX;
      while (high - low > 1e-5) {
         double mid = low + (high - low) / 2;
         if (ok(mid, nums, k)) {
            low = mid;
            ret = mid;
         } else {
            high = mid;
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,12,-5,-6,50,3};
   cout << (ob.findMaxAverage(v, 4));
}

इनपुट

{1,12,-5,-6,50,3},4

आउटपुट

12.75000

  1. C++ में किसी सरणी का अधिकतम औसत योग विभाजन

    समस्या कथन एक सरणी को देखते हुए, हम संख्या A की एक पंक्ति को अधिकतम K आसन्न (गैर-रिक्त) समूहों में विभाजित करते हैं, फिर स्कोर प्रत्येक समूह के औसत का योग होता है। अधिकतम स्कोर क्या हो सकता है? उदाहरण यदि इनपुट सरणी {9, 2, 5, 3, 10} है तो हम सरणी को इस प्रकार विभाजित कर सकते हैं - {9} {2, 5, 3} औ

  1. कम से कम X के आकार के उप-सरणी का अधिकतम औसत और C++ में अधिकतम Y

    समस्या कथन एक सरणी गिरफ्तारी [] और दो पूर्णांक X और Y को देखते हुए। कार्य कम से कम X के आकार की एक उप-सरणी और अधिकतम औसत के साथ अधिकतम Y को खोजना है उदाहरण यदि इनपुट ऐरे {2, 10, 15, 7, 8, 4} और x =3 और Y =3 है तो हम निम्न प्रकार से अधिकतम औसत 12.5 प्राप्त कर सकते हैं - (10 + 15) / 2 = 12.5 एल्गोरि

  1. पायथन में अधिकतम सबरे

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी ए है। हमें सन्निहित उपसरणियों को खोजना है, जिसकी लंबाई कम से कम एक होगी, और जिसका योग सबसे बड़ा है, और इसका योग भी लौटाएं। तो अगर एरे ए =[-2,1,-3,4,-1,2,1,-5,4] की तरह है, तो योग 6 होगा। और सबरेरे [4, -1] होगा , 2, 1] इसे हल करने के लिए हम गतिशील प्रोग्रामिंग