Sort by

recency

|

3087 Discussions

|

  • + 0 comments

    Python Solution

    def circularArrayRotation(a, k, queries):
        for i in range(k):
            a.insert(0, a.pop())
        return (a[i] for i in queries)
    
  • + 0 comments

    Here is my c++ solution, you can watch the explanation here : https://youtu.be/MaT-4dnozJI

    Solution 1 O(n + m) :

    vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries) {
        vector<int> newArray(a.size()), result;
        for(int i = 0; i < a.size(); i++){
            newArray[(i + k) % a.size()] = a[i];
        }
        for(int i = 0; i < queries.size(); i++) result.push_back(newArray[queries[i]]);
        return result;
    }
    

    Solution 2 O(m) :

    vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries) {
        vector<int> result;
        for(int i = 0; i < queries.size(); i++) {
            int previousIndex = (queries[i] - k + a.size() * 100000 ) % a.size();
            result.push_back(a[previousIndex]);
        }
        return result;
    }
    
  • + 0 comments

    public static List circularArrayRotation(List a, int k, List queries) {

        for(int i=0 ; i<k ; i++){
            rotateArray(a);
        }
        List<Integer> res = new ArrayList<>();
        for(int q : queries){
            res.add(a.get(q));
        }
        return res;
    }
    
    public static void rotateArray(List<Integer> a){
    
        a.add(0,a.get(a.size()-1));
        a.remove(a.size()-1);   
    
    }
    
  • + 0 comments

    Python 3

    def circularArrayRotation(a, k, queries):

    n = len(a)
    b = [0]*n
    for i in range(n):
        b[(i+k)%n] = a[i]
    k = []
    for i in queries:
        k.append(b[i])
    return k
    
  • + 0 comments

    Java solution using modular arithmetic:

        public static List<Integer> circularArrayRotation(List<Integer> a, int k, List<Integer> queries) {
            int n = a.size();
            int[] rotated = new int[n];
            
            for (int i = 0; i < n; i++) {
                rotated[(i+k) % n] = a.get(i);
            }
    
            List<Integer> result = new ArrayList<>();
            
            for (int q : queries) {
                result.add(rotated[q]);
            }
            
            return result;
        }