


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}};
Output
13,223
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}.
p>
- {3, 2} -> Ia mencetak elemen dalam indeks kedua.
Masuk
arr[] = {3, 2, 1}, {{3, 2}, {3, 0}}
Output
1,3
Penerangan - Ia mencetak tatasusunan daripada indeks ke-2 dan ke-0.
Masuk
arr[] = {76,20,51,78}, queries={{1},{1},{3, 1}}
Output
78
Penjelasan- Selepas memutar tatasusunan ke kanan 2 kali, tatasusunan menjadi [51, 78, 76, 20]. Elemen pada indeks pertama ialah 78.
Kaedah 1Dalam 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#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; }
13 223
Salin selepas log masuk
Kerumitan masa - O(N*K), lalui pertanyaan dan putar tatasusunan. 13 223
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#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; }
13 223
Salin selepas log masuk
Kerumitan masa - O(N+K) untuk memasukkan elemen tatasusunan ke dalam baris gilir.
13 223
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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";

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.

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

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.

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.

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.

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 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.
