Python3 Program for Find element at given index after a number of rotations
Last Updated :
05 Sep, 2024
An array consisting of N integers is given. There are several Right Circular Rotations of range[L..R] that we perform. After performing these rotations, we need to find element at a given index.
Examples :
Input : arr[] : {1, 2, 3, 4, 5}
ranges[] = { {0, 2}, {0, 3} }
index : 1
Output : 3
Explanation : After first given rotation {0, 2}
arr[] = {3, 1, 2, 4, 5}
After second rotation {0, 3}
arr[] = {4, 3, 1, 2, 5}
After all rotations we have element 3 at given
index 1.
Method : Brute-force The brute force approach is to actually rotate the array for all given ranges, finally return the element in at given index in the modified array.
Method : Efficient We can do offline processing after saving all ranges.
Suppose, our rotate ranges are : [0..2] and [0..3]
We run through these ranges from reverse.
After range [0..3], index 0 will have the element which was on index 3.
So, we can change 0 to 3, i.e. if index = left, index will be changed to right.
After range [0..2], index 3 will remain unaffected.
So, we can make 3 cases :
If index = left, index will be changed to right.
If index is not bounds by the range, no effect of rotation.
If index is in bounds, index will have the element at index-1.
Below is the implementation :
For better explanation:-
10 20 30 40 50
Index: 1
Rotations: {0,2} {1,4} {0,3}
Answer: Index 1 will have 30 after all the 3 rotations in the order {0,2} {1,4} {0,3}.
We performed {0,2} on A and now we have a new array A1.
We performed {1,4} on A1 and now we have a new array A2.
We performed {0,3} on A2 and now we have a new array A3.
Now we are looking for the value at index 1 in A3.
But A3 is {0,3} done on A2.
So index 1 in A3 is index 0 in A2.
But A2 is {1,4} done on A1.
So index 0 in A2 is also index 0 in A1 as it does not lie in the range {1,4}.
But A1 is {0,2} done on A.
So index 0 in A1 is index 2 in A.
On observing it, we are going deeper into the previous rotations starting from the latest rotation.
{0,3}
|
{1,4}
|
{0,2}
This is the reason we are processing the rotations in reverse order.
Please note that we are not rotating the elements in the reverse order, just processing the index from reverse.
Because if we actually rotate in reverse order, we might get a completely different answer as in case of rotations the order matters.
C++
#include <iostream>
#include <vector>
// Function to compute the element at given index
int findElement(std::vector<int>& arr, std::vector<std::vector<int>>& ranges, int rotations, int index) {
for (int i = rotations - 1; i >= 0; i--) {
// Range[left...right]
int left = ranges[i][0];
int right = ranges[i][1];
// Rotation will not have any effect
if (left <= index && right >= index) {
if (index == left)
index = right;
else
index--;
}
}
// Returning new element
return arr[index];
}
// Driver Code
int main() {
std::vector<int> arr = {1, 2, 3, 4, 5};
// No. of rotations
int rotations = 2;
// Ranges according to 0-based indexing
std::vector<std::vector<int>> ranges = {{0, 2}, {0, 3}};
int index = 1;
std::cout << findElement(arr, ranges, rotations, index) << std::endl;
return 0;
}
Java
import java.util.ArrayList;
class Main {
// Function to compute the element at the given index
static int findElement(ArrayList<Integer> arr, ArrayList<ArrayList<Integer>> ranges, int rotations, int index) {
for (int i = rotations - 1; i >= 0; i--) {
// Range[left...right]
int left = ranges.get(i).get(0);
int right = ranges.get(i).get(1);
// Rotation will not have any effect
if (left <= index && right >= index) {
if (index == left)
index = right;
else
index--;
}
}
// Returning the new element
return arr.get(index);
}
// Driver Code
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<Integer>() {{
add(1);
add(2);
add(3);
add(4);
add(5);
}};
// No. of rotations
int rotations = 2;
// Ranges according to 0-based indexing
ArrayList<ArrayList<Integer>> ranges = new ArrayList<ArrayList<Integer>>() {{
add(new ArrayList<Integer>() {{ add(0); add(2); }});
add(new ArrayList<Integer>() {{ add(0); add(3); }});
}};
int index = 1;
System.out.println(findElement(arr, ranges, rotations, index));
}
}
Python
# Python 3 code to rotate an array
# and answer the index query
# Function to compute the element
# at given index
def findElement(arr, ranges, rotations, index) :
for i in range(rotations - 1, -1, -1 ) :
# Range[left...right]
left = ranges[i][0]
right = ranges[i][1]
# Rotation will not have
# any effect
if (left <= index and right >= index) :
if (index == left) :
index = right
else :
index = index - 1
# Returning new element
return arr[index]
# Driver Code
arr = [ 1, 2, 3, 4, 5 ]
# No. of rotations
rotations = 2
# Ranges according to
# 0-based indexing
ranges = [ [ 0, 2 ], [ 0, 3 ] ]
index = 1
print(findElement(arr, ranges, rotations, index))
# This code is contributed by Nikita Tiwari.
C#
using System;
using System.Collections.Generic;
class Program
{
// Function to compute the element at the given index
static int FindElement(List<int> arr, List<List<int>> ranges, int rotations, int index)
{
for (int i = rotations - 1; i >= 0; i--)
{
// Range[left...right]
int left = ranges[i][0];
int right = ranges[i][1];
// Rotation will not have any effect
if (left <= index && right >= index)
{
if (index == left)
index = right;
else
index--;
}
}
// Returning the new element
return arr[index];
}
// Driver Code
static void Main()
{
List<int> arr = new List<int> { 1, 2, 3, 4, 5 };
// No. of rotations
int rotations = 2;
// Ranges according to 0-based indexing
List<List<int>> ranges = new List<List<int>> { new List<int> { 0, 2 }, new List<int> { 0, 3 } };
int index = 1;
Console.WriteLine(FindElement(arr, ranges, rotations, index));
}
}
JavaScript
function findElement(arr, ranges, rotations, index) {
for (let i = rotations - 1; i >= 0; i--) {
// Range[left...right]
let left = ranges[i][0];
let right = ranges[i][1];
// Rotation will not have any effect
if (left <= index && right >= index) {
if (index === left)
index = right;
else
index--;
}
}
// Returning new element
return arr[index];
}
// Driver Code
const arr = [1, 2, 3, 4, 5];
// No. of rotations
const rotations = 2;
// Ranges according to 0-based indexing
const ranges = [[0, 2], [0, 3]];
const index = 1;
console.log(findElement(arr, ranges, rotations, index));
Output :
3
Time Complexity: O(N), where N represents the given number of rotations.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Please refer complete article on Find element at given index after a number of rotations for more details!
Similar Reads
Python Tutorial - Learn Python Programming Language Python is one of the most popular programming languages. Itâs simple to use, packed with features and supported by a wide range of libraries and frameworks. Its clean syntax makes it beginner-friendly. It'sA high-level language, used in web development, data science, automation, AI and more.Known fo
10 min read
Python Interview Questions and Answers Python is the most used language in top companies such as Intel, IBM, NASA, Pixar, Netflix, Facebook, JP Morgan Chase, Spotify and many more because of its simplicity and powerful libraries. To crack their Online Assessment and Interview Rounds as a Python developer, we need to master important Pyth
15+ min read
Python OOPs Concepts Object Oriented Programming is a fundamental concept in Python, empowering developers to build modular, maintainable, and scalable applications. By understanding the core OOP principles (classes, objects, inheritance, encapsulation, polymorphism, and abstraction), programmers can leverage the full p
11 min read
Python Projects - Beginner to Advanced Python is one of the most popular programming languages due to its simplicity, versatility, and supportive community. Whether youâre a beginner eager to learn the basics or an experienced programmer looking to challenge your skills, there are countless Python projects to help you grow.Hereâs a list
10 min read
Python Exercise with Practice Questions and Solutions Python Exercise for Beginner: Practice makes perfect in everything, and this is especially true when learning Python. If you're a beginner, regularly practicing Python exercises will build your confidence and sharpen your skills. To help you improve, try these Python exercises with solutions to test
9 min read
Python Programs Practice with Python program examples is always a good choice to scale up your logical understanding and programming skills and this article will provide you with the best sets of Python code examples.The below Python section contains a wide collection of Python programming examples. These Python co
11 min read
Python Introduction Python was created by Guido van Rossum in 1991 and further developed by the Python Software Foundation. It was designed with focus on code readability and its syntax allows us to express concepts in fewer lines of code.Key Features of PythonPythonâs simple and readable syntax makes it beginner-frien
3 min read
Python Data Types Python Data types are the classification or categorization of data items. It represents the kind of value that tells what operations can be performed on a particular data. Since everything is an object in Python programming, Python data types are classes and variables are instances (objects) of thes
9 min read
Input and Output in Python Understanding input and output operations is fundamental to Python programming. With the print() function, we can display output in various formats, while the input() function enables interaction with users by gathering input during program execution. Taking input in PythonPython input() function is
8 min read
Enumerate() in Python enumerate() function adds a counter to each item in a list or other iterable. It turns the iterable into something we can loop through, where each item comes with its number (starting from 0 by default). We can also turn it into a list of (number, item) pairs using list().Let's look at a simple exam
3 min read