Rumah pembangunan bahagian belakang C++ Susun semula dan kemas kini elemen tatasusunan mengikut pertanyaan yang diberikan

Susun semula dan kemas kini elemen tatasusunan mengikut pertanyaan yang diberikan

Sep 14, 2023 pm 04:29 PM
tatasusunan memperbaharui susun semula

Susun semula dan kemas kini elemen tatasusunan mengikut pertanyaan yang diberikan

Dalam soalan ini, kami akan melaksanakan pertanyaan yang diberikan pada elemen tatasusunan. Pertanyaan mengandungi gelung putaran kiri, putaran kanan dan kemas kini elemen tatasusunan.

Bahagian logik untuk menyelesaikan masalah ialah putaran tatasusunan. Cara mudah untuk memutar tatasusunan ke kiri ialah menggantikan setiap elemen dengan elemen seterusnya dan elemen terakhir dengan elemen pertama.

Kita boleh menggunakan struktur data deque untuk memutar tatasusunan dengan cekap.

Pernyataan Masalah - Kami diberi tatasusunan arr[] yang mengandungi nilai integer. Selain itu, kami diberi tatasusunan permintaan[] yang mengandungi pertanyaan K. Kita perlu melaksanakan setiap pertanyaan yang diberikan dalam permintaan[] pada elemen tatasusunan arr[] mengikut peraturan berikut.

  • {0} - Melakukan putaran kiri bulat pada tatasusunan.

  • {1) - Lakukan putaran ke kanan bulatan pada tatasusunan.

  • {2, p, q} - Mengemas kini elemen pada indeks p dengan q.

  • {3, p} - Mencetak elemen pada indeks p.

Contoh

Masuk

arr[] = {8, 9, 13, 44, 76, 67, 21, 51}; queries = {{1}, {0}, {2, 4, 50}, {3, 2}, {2, 2, 223}, {3, 2}};
Salin selepas log masuk

Output

13,223
Salin selepas log masuk

Penjelasan- Mari kita laksanakan setiap pertanyaan.

  • {1} -> Selepas memutar tatasusunan ke kanan, tatasusunan menjadi {51, 8, 9, 13, 44, 76, 67, 21}

  • {0} -> Selepas memutar tatasusunan yang dikemas kini ke kiri, tatasusunan menjadi sama dengan {8, 9, 13, 44, 76, 67, 21, 51}.

    < /里>
  • {2, 4, 50} -> Selepas mengemas kini elemen pada indeks 4 hingga 50, tatasusunan menjadi {8, 9, 13, 44, 50, 67, 21, 51}#🎜 🎜 #

    < /里>
  • {3, 2} -> Ia mencetak elemen dalam indeks kedua.

  • {2, 2, 223}−> Kemas kini elemen pada indeks kedua kepada 223 dan tatasusunan menjadi {8, 9, 223, 44, 50, 67, 21, 51}.

  • {3, 2} -> Ia mencetak elemen dalam indeks kedua.

Masuk

arr[] = {3, 2, 1}, {{3, 2}, {3, 0}}
Salin selepas log masuk

Output

1,3
Salin selepas log masuk

Penerangan - Ia mencetak tatasusunan daripada indeks ke-2 dan ke-0.

Masuk

arr[] = {76,20,51,78}, queries={{1},{1},{3, 1}}
Salin selepas log masuk

Output

78
Salin selepas log masuk

Penjelasan- Selepas memutar tatasusunan ke kanan 2 kali, tatasusunan menjadi [51, 78, 76, 20]. Elemen pada indeks pertama ialah 78.

Kaedah 1

Dalam kaedah ini, kami akan mengulangi setiap pertanyaan dan melaksanakan operasi berdasarkan pertanyaan yang diberikan. Kami menggantikan setiap elemen dalam tatasusunan dengan elemen seterusnya untuk memutarkannya ke kiri, dan setiap elemen dengan elemen sebelumnya untuk memutarkannya ke kanan.

Algoritma

Langkah 1 - Mulakan gelung melalui setiap pertanyaan.

Langkah 2− Jika pertanyaan[p][0] bersamaan dengan 0, sila ikut langkah di bawah.

Langkah 2.1- Mulakan pembolehubah "temp" menggunakan elemen pertama tatasusunan.

Langkah 2.2- Mula melintasi tatasusunan dan gantikan setiap elemen dengan elemen seterusnya.

Langkah 2.3- Gantikan elemen terakhir dengan nilai "temp".

Langkah 3− Jika pertanyaan[p][0] bersamaan dengan 1, ikut langkah ini.

Langkah 3.1- Simpan elemen terakhir tatasusunan dalam pembolehubah "temp".

Langkah 3.2- Mula melintasi tatasusunan dan gantikan setiap elemen dengan elemen sebelumnya.

Langkah 3.3- Kemas kini elemen pertama dengan nilai "temp".

Langkah 4- Jika permintaan[p][0] ialah 2, kemas kini elemen tatasusunan pada indeks yang diberikan dengan nilai yang diberikan.

Langkah 5- Jika permintaan[p][0] ialah 3, cetak nilai tatasusunan pada indeks yang diberikan.

Contoh

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

void performQueries(int arr[], int N, vector<vector<int>> &queries) {
    int len = queries.size();
    for (int p = 0; p < len; p++) {
        // For left shift
        if (queries[p][0] == 0) {
            //    left shift array
            int temp = arr[0];
            for (int p = 0; p < N - 1; p++){
                arr[p] = arr[p + 1];
            }
            arr[N - 1] = temp;
        }
        // For the right shift
        else if (queries[p][0] == 1) {
            // Right shift array
            int temp = arr[N - 1];
            for (int p = N - 1; p > 0; p--){
                arr[p] = arr[p - 1];
            }
            arr[0] = temp;
        }
        // For updating the value
        else if (queries[p][0] == 2) {
            arr[queries[p][1]] = queries[p][2];
        }
        // For printing the value
        else {
            cout << arr[queries[p][1]] << " ";
        }
    }
}
int main() {
    int arr[] = {8, 9, 13, 44, 76, 67, 21, 51};
    int N = sizeof(arr) / sizeof(arr[0]);
    vector<vector<int>> queries;
    queries = {{1}, {0}, {2, 4, 50}, {3, 2}, {2, 2, 223}, {3, 2}};
    performQueries(arr, N, queries);
    return 0;
}
Salin selepas log masuk

Output

13 223
Salin selepas log masuk

Kerumitan masa - O(N*K), lalui pertanyaan dan putar tatasusunan.

Kerumitan ruang - O(1) kerana kami menggunakan ruang malar.

Kaedah 2

Dalam kaedah ini, kita akan menggunakan deque untuk menyimpan elemen tatasusunan. Selepas itu, untuk memutar tatasusunan ke kiri, kita boleh meletuskan elemen sebelumnya dari baris gilir dan menolaknya ke penghujung baris gilir. Begitu juga, kita boleh memutarkan tatasusunan ke arah yang betul.

Algoritma

Langkah 1 - Tentukan deque dan tolak semua elemen tatasusunan ke dalam baris gilir.

Langkah 2- Gunakan gelung for untuk mengulangi setiap pertanyaan.

Langkah 3- Untuk memutar tatasusunan ke kiri, alih keluar elemen pertama dari permulaan baris gilir dan tolaknya ke penghujung baris gilir.

Langkah 4 - Untuk memutar tatasusunan ke arah yang betul, alih keluar elemen dari penghujung baris gilir dan tolak elemen itu ke permulaan.

Langkah 5 - Kemas kini elemen atau cetak nilai elemen berdasarkan pertanyaan yang diberikan.

Contoh

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

void performQueries(int arr[], int N, vector<vector<int>> &queries) {
    // Queue to insert array elements
    deque<int> que;
    // Add elements to queue
    for (int p = 0; p < N; p++) {
        que.push_back(arr[p]);
    }
    // total queries
    int len = queries.size();
    for (int p = 0; p < len; p++) {
        // For left shift
        if (queries[p][0] == 0) {
            // Get the first element
            int temp = que[0];
            // Remove the first element
            que.pop_front();
            // Push element at the last
            que.push_back(temp);
        }
        // For the right shift
        else if (queries[p][0] == 1) {
            // Get the last element
            int temp = que[N - 1];
            // remove the last element
            que.pop_back();
            // Insert element at the start
            que.push_front(temp);
        }
        // For updating the value
        else if (queries[p][0] == 2) {
            que[queries[p][1]] = queries[p][2];
        }
        // For printing the value
        else {
            cout << que[queries[p][1]] << " ";
        }
    }
}
int main() {
    int arr[] = {8, 9, 13, 44, 76, 67, 21, 51};
    int N = sizeof(arr) / sizeof(arr[0]);
    vector<vector<int>> queries;
    queries = {{1}, {0}, {2, 4, 50}, {3, 2}, {2, 2, 223}, {3, 2}};
    performQueries(arr, N, queries);
    return 0;
}
Salin selepas log masuk

Output

13 223	
Salin selepas log masuk
Kerumitan masa - O(N+K) untuk memasukkan elemen tatasusunan ke dalam baris gilir.

Kerumitan Ruang - O(N) untuk menyimpan elemen ke dalam deque.

Struktur data deque membolehkan kami melakukan operasi putaran kiri dan kanan dalam masa O(1). Oleh itu, ia meningkatkan kecekapan kod yang melaksanakan pertanyaan yang diberikan.

Atas ialah kandungan terperinci Susun semula dan kemas kini elemen tatasusunan mengikut pertanyaan yang diberikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Windows tidak boleh mengakses peranti, laluan atau fail yang ditentukan Windows tidak boleh mengakses peranti, laluan atau fail yang ditentukan Jun 18, 2024 pm 04:49 PM

Komputer rakan mempunyai kesalahan sedemikian Apabila membuka "PC ini" dan fail pemacu C, ia akan menggesa "Explorer.EXE Windows tidak boleh mengakses peranti, laluan atau fail yang ditentukan. Anda mungkin tidak mempunyai kebenaran yang sesuai untuk mengakses projek. " Termasuk folder, fail, Komputer ini, Tong Kitar Semula, dsb., klik dua kali akan muncul tetingkap sedemikian, tetapi adalah perkara biasa untuk membukanya dengan mengklik kanan. Ini disebabkan oleh kemas kini sistem Jika anda juga menghadapi situasi ini, editor di bawah akan mengajar anda cara menyelesaikannya. 1. Buka editor pendaftaran Win+R dan masukkan regedit, atau klik kanan menu mula untuk menjalankan dan masukkan regedit 2. Cari registri "Computer\HKEY_CLASSES_ROOT\PackagedCom\ClassInd";

Bagaimana untuk mengalih keluar elemen pendua dari tatasusunan PHP menggunakan gelung foreach? Bagaimana untuk mengalih keluar elemen pendua dari tatasusunan PHP menggunakan gelung foreach? Apr 27, 2024 am 11:33 AM

Kaedah menggunakan gelung foreach untuk mengalih keluar elemen pendua daripada tatasusunan PHP adalah seperti berikut: melintasi tatasusunan, dan jika elemen itu sudah wujud dan kedudukan semasa bukan kejadian pertama, padamkannya. Contohnya, jika terdapat rekod pendua dalam hasil pertanyaan pangkalan data, anda boleh menggunakan kaedah ini untuk mengalih keluarnya dan mendapatkan hasil tanpa rekod pendua.

Windows menjeda kemas kini secara kekal, Windows mematikan kemas kini automatik Windows menjeda kemas kini secara kekal, Windows mematikan kemas kini automatik Jun 18, 2024 pm 07:04 PM

Kemas kini Windows mungkin menyebabkan beberapa masalah berikut: 1. Isu keserasian: Sesetengah aplikasi, pemacu atau peranti perkakasan mungkin tidak serasi dengan kemas kini Windows baharu, menyebabkan ia tidak berfungsi dengan betul atau ranap. 2. Isu prestasi: Kadangkala, kemas kini Windows boleh menyebabkan sistem menjadi lebih perlahan atau mengalami kemerosotan prestasi. Ini mungkin disebabkan oleh ciri baharu atau penambahbaikan yang memerlukan lebih banyak sumber untuk dijalankan. 3. Isu kestabilan sistem: Sesetengah pengguna melaporkan bahawa selepas memasang kemas kini Windows, sistem mungkin mengalami ranap yang tidak dijangka atau ralat skrin biru. 4. Kehilangan data: Dalam kes yang jarang berlaku, kemas kini Windows boleh menyebabkan kehilangan data atau kerosakan fail. Inilah sebabnya sebelum membuat sebarang kemas kini penting, sandarkan anda

Seni PHP Array Deep Copy: Menggunakan Kaedah Berbeza untuk Mencapai Salinan Sempurna Seni PHP Array Deep Copy: Menggunakan Kaedah Berbeza untuk Mencapai Salinan Sempurna May 01, 2024 pm 12:30 PM

Kaedah untuk tatasusunan penyalinan dalam dalam PHP termasuk: Pengekodan dan penyahkodan JSON menggunakan json_decode dan json_encode. Gunakan peta_tatasusunan dan klon untuk membuat salinan kunci dan nilai yang mendalam. Gunakan bersiri dan menyahsiri untuk bersiri dan menyahsiri.

Pembalikan nilai kunci tatasusunan PHP: analisis perbandingan prestasi kaedah yang berbeza Pembalikan nilai kunci tatasusunan PHP: analisis perbandingan prestasi kaedah yang berbeza May 03, 2024 pm 09:03 PM

Perbandingan prestasi kaedah membalik nilai kunci tatasusunan PHP menunjukkan bahawa fungsi array_flip() berprestasi lebih baik daripada gelung for dalam tatasusunan besar (lebih daripada 1 juta elemen) dan mengambil masa yang lebih singkat. Kaedah gelung untuk membalikkan nilai kunci secara manual mengambil masa yang agak lama.

Aplikasi fungsi pengelompokan tatasusunan PHP dalam pengisihan data Aplikasi fungsi pengelompokan tatasusunan PHP dalam pengisihan data May 04, 2024 pm 01:03 PM

Fungsi array_group_by PHP boleh mengumpulkan elemen dalam tatasusunan berdasarkan kekunci atau fungsi penutupan, mengembalikan tatasusunan bersekutu dengan kuncinya ialah nama kumpulan dan nilainya ialah tatasusunan elemen kepunyaan kumpulan.

AMD mengeluarkan kemas kini perisian tegar AGESA baharu untuk membetulkan kerentanan Zenbleed yang menjejaskan pemproses Zen 2 AMD mengeluarkan kemas kini perisian tegar AGESA baharu untuk membetulkan kerentanan Zenbleed yang menjejaskan pemproses Zen 2 May 03, 2024 pm 04:31 PM

Menurut berita dari laman web ini pada 3 Mei, MSI hari ini mengeluarkan kemas kini perisian tegar AMDAM4AGESA1.2.0.Ca, yang membetulkan kelemahan keselamatan Zenbleed dalam AMD Ryzen4000 siri Zen2 APU. Kemas kini perisian tegar yang dikeluarkan oleh MSI kali ini sesuai untuk hampir semua papan induk X570 Ia terutamanya membetulkan CVE-2023-20593 untuk pemproses Zen2, yang AMD mengklasifikasikan sebagai ancaman sederhana. Nota daripada tapak ini: Nombor penjejakan kerentanan ialah CVE-2023-20593, yang boleh mencuri data sulit pada kelajuan 30KB setiap teras sesaat. Serangan ini menjejaskan semua perisian yang berjalan pada CPU, termasuk mesin maya, kotak pasir, bekas dan proses. Walaupun tujuan AGESA1.2.0.Ca

Amalan Terbaik untuk Menyalin Dalam Tatasusunan PHP: Temui Kaedah Cekap Amalan Terbaik untuk Menyalin Dalam Tatasusunan PHP: Temui Kaedah Cekap Apr 30, 2024 pm 03:42 PM

Amalan terbaik untuk melaksanakan salinan dalam tatasusunan dalam PHP ialah menggunakan json_decode(json_encode($arr)) untuk menukar tatasusunan kepada rentetan JSON dan kemudian menukarnya kembali kepada tatasusunan. Gunakan unserialize(serialize($arr)) untuk mensiri tatasusunan kepada rentetan dan kemudian menyahsirikannya kepada tatasusunan baharu. Gunakan RecursiveIteratorIterator untuk melintasi tatasusunan berbilang dimensi secara rekursif.

See all articles