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

सी ++ में घुमाए गए क्रमबद्ध सरणी में न्यूनतम खोजें

मान लीजिए कि एक सरणी है, और इसे क्रमबद्ध किया गया है, मान लें कि सरणी को किसी धुरी पर घुमाया गया है, जो हमारे लिए अज्ञात है। तो हमें उस घुमाए गए सरणी से न्यूनतम खोजना होगा। तो अगर ऐरे [3,4,5,1,2] जैसा है, तो आउटपुट 1 होगा।

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

  • निम्न:=0 और उच्च:=सरणी की अंतिम अनुक्रमणिका, n:=सरणी का आकार, उत्तर:=अनंत
  • जबकि कम <=उच्च
    • मध्य :=निम्न + (उच्च-निम्न)/2
    • अगर गिरफ्तारी [कम] <एआर [मध्य], तो उत्तर:=न्यूनतम उत्तर और एआर [कम], निम्न:=मध्य + 1
    • अन्यथा अगर एआर [उच्च]> एआर [मध्य], तो उत्तर:=न्यूनतम उत्तर और एआर [मध्य], उच्च:=मध्य – 1
    • अन्यथा यदि निम्न =मध्य, तो उत्तर :=न्यूनतम उत्तर और आगमन [निम्न], निम्न :=मध्य + 1
    • अन्यथा यदि उच्च =मध्य, तो उत्तर:=न्यूनतम उत्तर और एआर [उच्च], उच्च:=मध्य - 1
  • वापसी उत्तर

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int findMin(vector<int>& arr) {
      int low = 0;
      int high = arr.size() - 1;
      int n = arr.size();
      int ans = INT_MAX;
      while(low <= high){
         int mid = low + (high - low) / 2;
         if(arr[low] < arr[mid]){
            ans = min(ans, arr[low]);
            low = mid + 1;
         } else if(arr[high] > arr[mid]) {
            ans = min(ans, arr[mid]);
            high = mid - 1;
         } else if(low == mid) {
            ans = min(ans, arr[low]);
            low = mid + 1;
         } else if(high == mid) {
            ans = min(ans, arr[high]);
            high = mid - 1;
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {15,35,85,96,5,6,8,12};
   cout << ob.findMin(v);
}

इनपुट

[15,35,85,96,5,6,8,12]

आउटपुट

5

  1. सी ++ में क्रमबद्ध और घुमाए गए सरणी में अधिकतम तत्व

    विवरण किसी अज्ञात बिंदु पर घुमाए गए अलग-अलग तत्वों की एक क्रमबद्ध सरणी को देखते हुए, कार्य इसमें अधिकतम तत्व ढूंढना है। उदाहरण यदि इनपुट सरणी {30, 40, 50, 10, 20} है तो अधिकतम तत्व 50 है। एल्गोरिदम अधिकतम तत्व एकमात्र ऐसा तत्व है जिसका अगला तत्व उससे छोटा है। यदि कोई अगला छोटा तत्व नहीं है, तो को

  1. न्यूनतम x ऐसे खोजें कि (x% k) * (x / k) ==n C++ . में

    दो धनात्मक पूर्णांक n और k दिए गए हैं, और हमें धनात्मक पूर्णांक x ज्ञात करना है, जैसे कि (x% k)*(x / k) n के समान हो। तो अगर n और k क्रमशः 4 और 6 हैं, तो आउटपुट 10 होगा। तो (10% 6) * (10 / 6) =4. जैसा कि हम जानते हैं कि x% k का मान रेंज [1 से k - 1] (0 शामिल नहीं है) में होगा। * के) / (एक्स% के) +

  1. सी ++ में घुमाए गए क्रमबद्ध सरणी में घूर्णन गणना खोजें

    विचार करें कि हमारे पास एक सरणी है, जो क्रमबद्ध सरणी घुमाई गई है। हमें सरणी को सॉर्ट करने के लिए आवश्यक घुमावों की संख्या का पता लगाना होगा। (हम दाएं से बाएं घुमाने पर विचार करेंगे।) मान लीजिए कि सरणी इस प्रकार है:{15, 17, 1, 2, 6, 11}, तो हमें सरणी को क्रमबद्ध करने के लिए दो बार घुमाना होगा। अंतिम