Interview Question: Rotate Array C++
Company Interviews Using C++ Data Structures and Algorithms
vector<int> rotateArray(vector<int>arr, int k) {
int n = arr.size();
k = k % n;
reverse(arr.begin(), arr.begin()+k);
reverse(arr.begin()+k, arr.end());
reverse(arr.begin(), arr.end());
return arr;
}
English :
This C++ code defines a function called `rotateArray` that takes a vector of integers (`arr`) and an integer `k` as its parameters. The function’s purpose is to rotate the elements of the input vector to the right by `k` positions. Here’s a step-by-step explanation of what the code does:
1. `int n = arr.size();`: This line calculates the size of the input vector `arr` and stores it in the variable `n`, which represents the number of elements in the vector.
2. `k = k % n;`: To handle cases where `k` is greater than the size of the vector, this line calculates the effective rotation by taking the modulus of `k` with `n`. This ensures that `k` is within the valid range of rotations.
3. `reverse(arr.begin(), arr.begin()+k);`: The `reverse` function is used to reverse a range of elements in the vector. In this line, it reverses the elements from the beginning of the vector (`arr.begin()`) up to, but not including, the element at position `k`. This effectively moves the first `k` elements to the end of the vector, which simulates a right rotation of `k` positions.
4. `reverse(arr.begin()+k, arr.end());`: This line reverses the elements from position `k` to the end of the vector. It essentially rotates the remaining elements back to their original positions after the initial rotation in step 3.
5. `reverse(arr.begin(), arr.end());`: Finally, this line reverses the entire vector, effectively rotating all the elements by `k` positions to the right. This step is necessary because the previous two reversals only rotated parts of the vector, and this step ensures a complete rotation.
6. `return arr;`: The rotated vector is returned as the result of the function.
So, the code takes an input vector, performs a right rotation of the elements by `k` positions, and returns the rotated vector. This code modifies the input vector in place and does not create a new vector.
Hindi :
यह C++ कोड एक फ़ंक्शन को परिभाषित करता है जिसे `rotateArray` कहा जाता है, जो एक पूर्णांक वेक्टर (`arr`) और एक पूर्णांक `k` को इसके पैरामीटर के रूप में लेता है। फ़ंक्शन का उद्देश्य इनपुट वेक्टर के तत्वों को `k` स्थानों तक दाएं की ओर घुमाना है। निम्नलिखित में कोड क्या कर रहा है, इसकी चरण-दर-चरण व्याख्या दी गई है:
1. `int n = arr.size();`: इस पंक्ति में इनपुट वेक्टर `arr` के आकार को गणना किया जाता है और इसे चर `n` में संग्रहित किया जाता है, जो वेक्टर में तत्वों की संख्या को प्रस्तुत करता है।
2. `k = k % n;`: इस पंक्ति में `k` को `n` के साथ भाग करने से वास्तविक घुमाने की गणना की जाती है, ताकि यह सुनिश्चित करें कि `k` घुमाने के मान्य सीमा में है, जब वेक्टर के आकार से अधिक हो।
3. `reverse(arr.begin(), arr.begin()+k);`: `reverse` फ़ंक्शन का उपयोग वेक्टर में तत्वों की एक श्रेणी को उलटने के लिए किया जाता है। इस पंक्ति में, यह वेक्टर की शुरुआत से (`arr.begin()`) शुरू होकर, परंतु स्थान `k` पर स्थित तत्व को छोड़कर, तत्वों को उलट देता है। इससे प्रभावी रूप से पहले `k` तत्वों को वेक्टर के अंत में ले जाता है, जिससे `k` स्थानों तक की दाएं ओर घुमाव सिमुलेट होता है।
4. `reverse(arr.begin()+k, arr.end());`: इस पंक्ति में वेक्टर के स्थान `k` से अंत तक के तत्वों को उलट देती है। इससे प्राय: पहले घुमाने के बाद शेष तत्वों को उनके मूल स्थानों पर लौटाता है।
5. `reverse(arr.begin(), arr.end());`: अंत में, इस पंक्ति में पूरे वेक्टर को उलट दिया जाता है, प्रभावी रूप से सभी तत्वों को `k` स्थानों तक दाएं की ओर घुमाते हैं। इस कदम की आवश्यकता है क्योंकि पिछले दो उलटने केवल वेक्टर के भागों को घुमाते थे, और यह कदम पूरे घुमाने को सुनिश्चित करता है।
6. `return arr;`: घुमाया हुआ वेक्टर फ़ंक्शन के परिणाम के रूप में लौटाया जाता है।
इसलिए, कोड एक इनपुट वेक्टर को लेता है, तत्वों को `k` स्थानों तक दाएं ओर घुमाता है, और घुमाया हुआ वेक्टर को लौटाता है।
Hinglish :
Yeh C++ ka code `rotateArray` naam ka ek function define karta hai jo ek purane of integers (`arr`) aur ek purana `k` integer ko uske parameters ke roop mein leta hai. Is function ka uddeshya hai ki input vector ke tatvon ko `k` sthanon tak daayein ki or ghuma de. Neeche kuch kadam-kadam ki vyakhya di gayi hai ki yeh code kaise kaam karta hai:
1. `int n = arr.size();`: Is line mein input vector `arr` ki size ko calculate kiya jata hai aur use `n` variable mein store kiya jata hai, jo vector mein maujud tatvon ki sankhya ko darust karta hai.
2. `k = k % n;`: `k` vector ke size se bada hone ke case ko handle karne ke liye, is line mein `k` ko `n` ke modulus se calculate kiya jata hai. Isse ye pakka ho jata hai ki `k` daayen ki marammat ke valid shreni mein hota hai.
3. `reverse(arr.begin(), arr.begin()+k);`: `reverse` function vector ke tatvon ke ek range ko ulta karne ke liye istemal hota hai. Is line mein, yeh vector ke shuruaati hisse se (`arr.begin()`) lekar, par nahi samete, sthan par maujud tatvon ko ulta karta hai jo sthan `k` pe hote hain. Isse pehle ke `k` tatv, vector ke ant tak chale jate hain, jisse ki `k` sthanon tak daayen ki marammat ho.
4. `reverse(arr.begin()+k, arr.end());`: Is line mein vector ke sthan `k` se lekar ant tak ke tatvon ko ulta karta hai. Yeh practically, pehle ke daayein ki marammat ke baad bache hue tatvon ko unke asal sthanon par ghuma deta hai.
5. `reverse(arr.begin(), arr.end());`: Ant mein, is line mein pura vector ulta kiya jata hai, praktishth roop se sabhi tatvon ko `k` sthanon tak daayen ki marammat hoti hai. Is kadam ki aavashyakta isliye hoti hai kyun ki pehle ke do ulte marammaten sirf vector ke hisson ko ghuma deti hain, aur yeh kadam ek poorna daayen ki marammat ko surakshit kar leta hai.
6. `return arr;`: Daayein marammat ki gayi vector function ke result ke roop mein vapas ki jati hai.
Isliye, yeh code ek input vector ko leta hai, tatvon ko `k` sthanon tak daayen ki marammat karta hai, aur daayen marammat ki gayi vector ko vapas deta hai. Yeh code input vector ko sthan par modify karta hai aur ek naya vector nahi banata.