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

C++ में घूर्णित क्रमबद्ध सरणी (Rotated Sorted Array) में न्यूनतम तत्व खोजना


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

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • low := 0 और high := सरणी का अंतिम सूचकांक, n := सरणी का आकार, ans := अनंत (infinity)
  • जब तक low ≤ high:
    • mid := low + (high - low)/2
    • यदि arr[low] < arr[mid], तो ans := min(ans, arr[low]), low := mid + 1
    • अन्यथा यदि arr[high] > arr[mid], तो ans := min(ans, arr[mid]), high := mid – 1
    • अन्यथा यदि low = mid, तो ans := min(ans, arr[low]), low := mid + 1
    • अन्यथा यदि high = mid, तो ans := min(ans, arr[high]), high := mid - 1
  • ans वापस करें

आइए निम्नलिखित कार्यान्वयन को देखें:

उदाहरण

#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;
    }
};

int 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. - C++ में सॉर्टेड और रोटेटेड ऐरे में अधिकतम तत्व

    विवरण अलग-अलग तत्वों का एक सॉर्टेड ऐरे दिया गया है जो किसी अज्ञात बिंदु पर रोटेटेड है, कार्य इसमें अधिकतम तत्व ढूंढना है। उदाहरण यदि इनपुट ऐरे {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. - C++ में रोटेटेड सॉर्टेड सरणी में रोटेशन काउंट ढूंढना

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