ಅರೇ ಲೀಟ್‌ಕೋಡ್ ಪರಿಹಾರವನ್ನು ಷಫಲ್ ಮಾಡಿ


ತೊಂದರೆ ಮಟ್ಟ ಸುಲಭ
ಆಗಾಗ್ಗೆ ಕೇಳಲಾಗುತ್ತದೆ ಅಡೋಬ್ ಆಪಲ್ ಬ್ಲೂಮ್ಬರ್ಗ್ ಗೂಗಲ್ ಮೈಕ್ರೋಸಾಫ್ಟ್
ಅರೇ

ಅರೇ ಲೀಟ್‌ಕೋಡ್ ಪರಿಹಾರವನ್ನು ಷಫಲ್ ಮಾಡುವ ಸಮಸ್ಯೆ ನಮಗೆ 2n ಉದ್ದವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇಲ್ಲಿ 2n ಎಂದು ಸೂಚಿಸುತ್ತದೆ ಸರಣಿ ಉದ್ದವು ಸಮವಾಗಿರುತ್ತದೆ. ರಚನೆಯನ್ನು ಕಲೆಸಲು ನಮಗೆ ಹೇಳಲಾಗುತ್ತದೆ. ಇಲ್ಲಿ ಕಲೆಸುವಿಕೆಯು ನಾವು ಯಾದೃಚ್ ly ಿಕವಾಗಿ ರಚನೆಯನ್ನು ಬದಲಾಯಿಸಬೇಕಾಗಿದೆ ಎಂದು ಅರ್ಥವಲ್ಲ ಆದರೆ ನಿರ್ದಿಷ್ಟ ಮಾರ್ಗವನ್ನು ತೋರಿಸಲಾಗಿದೆ. ಕೊಟ್ಟಿರುವ ಶ್ರೇಣಿಯನ್ನು [x1, x2,…, y1, y2,…] ಎಂದು ಪ್ರತಿನಿಧಿಸಬಹುದಾದರೆ, ನಂತರ ಕಲೆಸುವಿಕೆಯನ್ನು [x1, y1, x2, y2,…] ಎಂದು ನಿರೂಪಿಸಲಾಗುತ್ತದೆ. ಆದ್ದರಿಂದ ಸಮಸ್ಯೆ ಬಹಳ ಸರಳವಾಗಿದೆ ಮತ್ತು ನಾವು ಏನನ್ನೂ ಪರಿಹರಿಸಬೇಕೆಂದು ನಿರೀಕ್ಷಿಸುವುದಿಲ್ಲ. ಅಗತ್ಯವಾದ ಅನುಕ್ರಮವನ್ನು ಪಡೆಯಲು ಅಂಶಗಳನ್ನು ಸ್ವ್ಯಾಪ್ ಮಾಡಲು ನಾವು ಕೆಲವು ಮಾರ್ಗಗಳನ್ನು ಹುಡುಕಬೇಕಾಗಿದೆ. ಇನ್ಪುಟ್ನಲ್ಲಿ ಒಂದು ನಿರ್ಬಂಧವಿದೆ, ಇನ್ಪುಟ್ ಅಂಶಗಳು 10 ^ 3 ಕ್ಕಿಂತ ಕಡಿಮೆ. ಆದರೆ ದ್ರಾವಣದಲ್ಲಿ ಆಳವಾಗಿ ಧುಮುಕುವ ಮೊದಲು, ನಾವು ಕೆಲವು ಉದಾಹರಣೆಗಳಲ್ಲಿ ಲೂಪ್ ತೆಗೆದುಕೊಳ್ಳೋಣ.

ಅರೇ ಲೀಟ್‌ಕೋಡ್ ಪರಿಹಾರವನ್ನು ಷಫಲ್ ಮಾಡಿ

nums = [2,5,1,3,4,7], n = 3
[2,3,5,4,1,7]

ವಿವರಣೆ: in ಟ್‌ಪುಟ್ ಸಮಸ್ಯೆಯಲ್ಲಿ ಹೇರಿದ ಅಗತ್ಯ ಮಾನದಂಡಗಳನ್ನು ಪೂರೈಸುತ್ತದೆ ಎಂದು ನಾವು ಸುಲಭವಾಗಿ ಪರಿಶೀಲಿಸುತ್ತೇವೆ. ನಾವು x1, x2 ನಂತಹ ಹೆಸರನ್ನು y3 ರವರೆಗೆ ರಚನೆಯ ಅಂಶಗಳಿಗೆ ನಿಯೋಜಿಸಿದರೆ. ಅಂಶಗಳನ್ನು ಈಗ [x1, y1, x2, y2, x3, y3] ಶೈಲಿಯಲ್ಲಿ ಜೋಡಿಸಲಾಗಿದೆ ಎಂದು ನಾವು ನೋಡಬಹುದು.

ಅರೇ ಲೀಟ್‌ಕೋಡ್ ಪರಿಹಾರವನ್ನು ಬದಲಾಯಿಸುವ ವಿಧಾನ

ಅರೇ ಲೀಟ್‌ಕೋಡ್ ಪರಿಹಾರವನ್ನು ಷಫಲ್ ಮಾಡುವ ಸಮಸ್ಯೆ ಶ್ರೇಣಿಯನ್ನು ನಿರ್ದಿಷ್ಟ ರೀತಿಯಲ್ಲಿ ಬದಲಾಯಿಸಲು ಕೇಳುತ್ತದೆ. ಷಫ್ಲಿಂಗ್ ಫ್ಯಾಷನ್ ರಚನೆಯ ಕೊನೆಯ ಅರ್ಧ ಅಂಶಗಳನ್ನು ಮೊದಲಾರ್ಧದ ಅಂಶಗಳ ನಡುವೆ ಇರಿಸಲು ಕೇಳುತ್ತದೆ. ಹೆಚ್ಚು ly ಪಚಾರಿಕವಾಗಿ, ಒಂದು ಶ್ರೇಣಿಯನ್ನು [x1, x2, x3,…, y1, y2, y3,…] ಅನ್ನು [x1, y1, x2, y2, x3, y3,… xn, yn] ಎಂದು ಬದಲಾಯಿಸಬೇಕು. ಆದ್ದರಿಂದ ಹೆಚ್ಚುವರಿ ಸ್ಥಳದ ಸಹಾಯದಿಂದ ಸಮಸ್ಯೆಯನ್ನು ಸುಲಭವಾಗಿ ಪರಿಹರಿಸಬಹುದು. ಏಕೆಂದರೆ ನಂತರ ನಾವು ಮೂಲದ ಉದ್ದದ ಹೊಸ ಶ್ರೇಣಿಯನ್ನು ರಚಿಸಬಹುದು. ಮತ್ತು ಅಂಶಗಳನ್ನು ಮೊದಲಾರ್ಧದಿಂದ ದ್ವಿತೀಯಾರ್ಧದಿಂದ ತಳ್ಳಿರಿ. ಈ ರೀತಿಯಾಗಿ ನಾವು ಅಗತ್ಯವಿರುವ ರಚನೆಯೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳುತ್ತೇವೆ.

ಒ (1) ಜಾಗದಲ್ಲಿರುವ ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಸ್ಥಳವಿಲ್ಲದೆ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು. ಬೈನರಿ ಕುಶಲತೆಯಿಂದ ನಾವು ಸಹಾಯ ಪಡೆಯಬೇಕಾಗಿದೆ. ಈ ಕ್ರಮಾವಳಿಗಳು ಆಗಾಗ್ಗೆ ಕಾಣಿಸದ ಕಾರಣ ಇದು ಟ್ರಿಕ್‌ನಂತೆ ಕಾಣಿಸಬಹುದು. ಹೀಗಾಗಿ ಈ ಸಮಸ್ಯೆಗಳು ತಾತ್ಕಾಲಿಕ ವರ್ಗಕ್ಕೆ ಸೇರುತ್ತವೆ. ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುವ ಮೊದಲ ಹೆಜ್ಜೆ ಎಂದರೆ ಮೊದಲ ಮತ್ತು ದ್ವಿತೀಯಾರ್ಧದಿಂದ ಅಂಶಗಳನ್ನು ಹೇಗಾದರೂ ದ್ವಿತೀಯಾರ್ಧದಲ್ಲಿ ಸಂಯೋಜಿಸುವುದು. ಆದರೆ ಈ ಸಂಯೋಜನೆಯ ಅರ್ಥವೇನು? ನಾವು ಮೊದಲು ಅಂಶಗಳನ್ನು ದ್ವಿತೀಯಾರ್ಧದಿಂದ ಎಡಕ್ಕೆ (ಎಡ ಬೈನರಿ ಶಿಫ್ಟ್) 10 ಬಿಟ್‌ಗಳಿಂದ ಬದಲಾಯಿಸುತ್ತೇವೆ. ನಂತರ ನಾವು ಮೊದಲಾರ್ಧದ ಅಂಶಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ ಅಥವಾ ದ್ವಿತೀಯಾರ್ಧದ ಅಂಶಗಳನ್ನು ನಾವು ಮೊದಲಾರ್ಧದ ಅಂಶಗಳೊಂದಿಗೆ ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ. ಆದ್ದರಿಂದ ಈಗ ಅಂಶಗಳನ್ನು ಸಂಯೋಜಿಸಲಾಗಿದೆ.

ಈಗ ಸರಳವಾಗಿ ಮೂಲ ರಚನೆಯ ಮೇಲೆ ಸಂಚರಿಸಿ. ಪ್ರತಿ ಪುನರಾವರ್ತನೆಯಲ್ಲಿ 2 ಹಂತಗಳನ್ನು ಹೆಚ್ಚಿಸುವ ಫಾರ್ ಲೂಪ್ ಅನ್ನು ನಾವು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ. ಪ್ರತಿ ಹಂತದಲ್ಲೂ ನಾವು ದ್ವಿತೀಯಾರ್ಧದಿಂದ ಒಂದು ಅಂಶವನ್ನು ಆರಿಸುತ್ತೇವೆ ಮತ್ತು ಈ ಸ್ಥಳಗಳಲ್ಲಿನ ಅಂಶಗಳನ್ನು xi, yi ನೊಂದಿಗೆ ಬದಲಾಯಿಸುತ್ತೇವೆ. ಮೊದಲ ಅಂಶವನ್ನು ಪಡೆಯಲು ನಾವು ದ್ವಿತೀಯಾರ್ಧದಲ್ಲಿ 2 ^ 10-1 ರೊಂದಿಗೆ ಮೊದಲ ಮತ್ತು AND ಅಂಶಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ ಮೂಲಕ xi, yi ಅನ್ನು ಪಡೆಯಬಹುದು. ಎರಡನೆಯ ಅಂಶಕ್ಕೆ ಸಂಬಂಧಿಸಿದಂತೆ, ನಾವು ಪ್ರತಿ ಅಂಶವನ್ನು 10 ಬಿಟ್‌ಗಳಿಂದ ಬಲಕ್ಕೆ ಬದಲಾಯಿಸುತ್ತೇವೆ.

ಅರೇ ಲೀಟ್‌ಕೋಡ್ ಪರಿಹಾರವನ್ನು ಕಲೆಸುವ ಕೋಡ್

ಸಿ ++ ಕೋಡ್

#include <bits/stdc++.h>
using namespace std;

vector<int> shuffle(vector<int>& nums, int n) {
    for(int i=n;i<2*n;i++){
        nums[i] = nums[i]<<10;
        nums[i] |= nums[i-n];
    }
    int z = n;
    for(int i=0;i<2*n;i+=2){
        nums[i] = nums[z] & 1023;
        nums[i+1] = nums[z++] >> 10;
    }
    return nums;
}

int main() {
    vector<int> input = {2,5,1,3,4,7};
    int n = 3;
    vector<int> output = shuffle(input, n);
    for(auto x: output)
        cout<<x<<" ";
}
2 3 5 4 1 7

ಜಾವಾ ಕೋಡ್

import java.util.*;
import java.io.*;

class Main {
    private static int[] shuffle(int[] nums, int n) {
        for(int i=n;i<2*n;i++){
            nums[i] = nums[i]<<10;
            nums[i] |= nums[i-n];
        }
        int z = n;
        for(int i=0;i<2*n;i+=2){
            nums[i] = nums[z] & 1023;
            nums[i+1] = nums[z++] >> 10;
        }
        return nums;
    }

    public static void main(String[] args) {
        int[] input = {2,5,1,3,4,7};
        int n = 3;
        int[] output = shuffle(input, n);
        for(int i=0;i<2*n;i++)
            System.out.print(output[i]+" ");
    }
}
2 3 5 4 1 7

ಸಂಕೀರ್ಣತೆ ವಿಶ್ಲೇಷಣೆ

ಸಮಯ ಸಂಕೀರ್ಣತೆ

ಒ (ಎನ್), ನಾವು ರಚನೆಯ ಪ್ರತಿಯೊಂದು ಅಂಶವನ್ನು ಹಾದುಹೋಗುವುದರಿಂದ. ನಮಗೆ ಒದಗಿಸಲಾಗಿದ್ದರೂ ಸಹ 2n ಅಂಶಗಳು, ಸಮಯದ ಸಂಕೀರ್ಣತೆಯು ಇನ್ನೂ O (N) ಆಗಿ ಉಳಿದಿದೆ.

ಬಾಹ್ಯಾಕಾಶ ಸಂಕೀರ್ಣತೆ

ಒ (1), ಅಲ್ಗಾರಿದಮ್ ಒಂದು ಸ್ಥಳದ ಅಲ್ಗಾರಿದಮ್ ಆಗಿದೆ. ಹೀಗಾಗಿ ಜಾಗದ ಸಂಕೀರ್ಣತೆಯೂ ಸ್ಥಿರವಾಗಿರುತ್ತದೆ.