


Temu bual Meituan: Sila tulis jadual cepat dengan tangan, saya terkejut!
Hari ini, penemu duga meminta saya menulis ringkasan di tempat kejadian adalah seperti berikut:
Pewawancara: Mari kita teruskan bercakap tentang struktur data dan algoritma. (Sambil bercakap, dia membelek resume saya dan menghulurkan pen, bermakna dia meminta saya menulis di belakang resume saya)
Rookie me: Apa maksud awak? Tulis di sini? (Sambil menunjuk resume)
Penemuduga: Yeah
Rookie me: No
Interviewer: Okay, itu sahaja untuk temuduga hari ini
Rookie me: (Saya sangat marah, saya nak letak pada pengurusan buruh saya. resume Penulisan kod? ) Shadiao
Penemuduga: (Memandang ke belakang, keliru)
Fikirkan, saya masih terlalu muda, tidak akan jadi seperti ini sekarang. Tulis sahaja, ia hanya sekeping kertas.
Sebenarnya, walaupun beratur cepat adalah mudah, saya rasa ramai orang tidak boleh menulisnya dengan tangan Adakah ramai orang yang boleh menulisnya dengan tangan di tempat dalam beberapa cara. .
Sekarang, mari analisa dan analisa ---- susun pantas.
Latar Belakang
Isih cepat telah dicadangkan oleh C. A. R. Hoare pada tahun 1962. Idea asasnya adalah untuk membahagikan data untuk diisih kepada dua bahagian bebas melalui satu pengisihan Semua data dalam satu bahagian adalah lebih kecil daripada semua data di bahagian lain, dan kemudian menggunakan kaedah ini untuk memisahkan dua bahagian data dengan cepat. . Isih, keseluruhan proses pengisihan boleh dilakukan [secara rekursif], supaya keseluruhan data menjadi urutan tersusun.
Agak sukar untuk memahami konsep ini.
Ia boleh difahami seperti ini:
Isih cepat ialah versi jenis gelembung yang dipertingkatkan Keseluruhan prosesnya adalah untuk mengalih keluar dan menampal sesuatu, mengoyakkannya dan menampalnya, mengoyakkannya dan menampalnya, sehingga. semua elemen mencapai keadaan tertib.
Idea teras:
Mula-mula ambil nombor daripada jujukan sebagai nombor asas, dan kemudian lakukan pembahagian saiz
Dalam proses pembahagian, semua nombor yang lebih besar daripada nombor ini diletakkan di sebelah kanannya, dan nombor yang lebih kecil daripada; atau sama dengannya adalah Letakkan semuanya ke kiri;
Ulang langkah kedua untuk selang kiri dan kanan sehingga hanya terdapat satu nombor dalam setiap selang, dan pengisihan selesai.
Kes pelaksanaan
Mari kita bongkar langkah demi langkah melalui gambar dan teks.
Ambil [4,1,6,2,9,3]
susunan ini sebagai contoh.
Hantaran pertama:
Pecah pertama [4,1,6,2,9,3] dan pilih elemen 4 sebagai titik pangsi
Periksa sama ada 1 < 4 (titik pangsi)
Semak sama ada 6 < (titik pangsi)
Periksa sama ada 2 < 4 (titik pangsi)
2 < 4 (titik pangsi) adalah benar, tukar indeks 2 dengan indeks tersimpan 6
(titik pangsi)
Semak jika 3 < 4 (titik pangsi)
3 < 4 (titik pangsi) Jika benar, simpan indeks 3 dan 6 Lakukan pertukaran titik storan indeks 3
Pada masa ini, bahagian kiri titik pangsi 4 semuanya kurang daripada 4, dan bahagian kanan lebih besar daripada 4

Tertib tatasusunan semasa ialah [3, 1, 2, 4, 9, 6].
Langkah seterusnya:
Mula-mula susun bahagian kiri dulu
Pilih elemen 3 sebagai titik pangsi
-
Semak jika 1 < ; ; 3 (titik pangsi) Tukar titik pangsi 3 dan nilai indeks storan 2 Sekarang titik pangsi telah dipecahkan pada kedudukan yang disusun [2,1] Pilih titik 2 sebagai pangsi-
Periksa sama ada 1 < 2 (titik pangsi)
Perjalanan di sebelah kiri selesai, dan titik pangsi 2 dan indeks storan 1 ditukar
Begitu juga dengan bahagian kanan...elakkan visual Saya tidak akan menerangkan keletihan satu persatu, tetapi anda boleh melihat gambar demonstrasi dinamik di bawah.
2. import java.util.Arrays;
public class QuickSortDemo {
//四个步骤:
//1.比较startIndex和endIndex,更喜欢理解为校验
//2.找出基准
//3.左边部分排序
//4.右边排序
public static void quickSort(int[] arr, int startIndex, int endIndex) {
if (startIndex < endIndex) {
//找出基准
int partition = partition(arr, startIndex, endIndex);
//分成两边递归进行
quickSort(arr, startIndex, partition - 1);
quickSort(arr, partition + 1, endIndex);
}
}
//找基准
private static int partition(int[] arr, int startIndex, int endIndex) {
int pivot = arr[startIndex];
int left = startIndex;
int right = endIndex;
//等于就没有必要排序
while (left != right) {
while (left < right && arr[right] > pivot) {
right--;
}
while (left < right && arr[left] <= pivot) {
left++;
}
//找到left比基准大,right比基准小,进行交换
if (left < right) {
swap(arr, left, right);
}
}
//第一轮完成,让left和right重合的位置和基准交换,返回基准的位置
swap(arr, startIndex, left);
return left;
}
//两数交换
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] a = {3, 1, 2, 4, 9, 6};
quickSort(a, 0, a.length - 1);
//输出结果
System.out.println(Arrays.toString(a));
}
}
Salin selepas log masuk
Hasil keluaran: [1, 2, 3, 4, 6, 9]
Salin selepas log masuk
Pelaksanaan kod, adalah disyorkan untuk menggabungkannya dengan animasi sebelumnya untuk memudahkan pemahaman.
Dari Ensiklopedia: Isih cepat telah dicadangkan oleh C. A. R. Hoare pada tahun 1962. Idea asasnya adalah untuk membahagikan data untuk diisih kepada dua bahagian bebas melalui satu pengisihan Semua data dalam satu bahagian adalah lebih kecil daripada semua data di bahagian lain, dan kemudian menggunakan kaedah ini untuk memisahkan dua bahagian data dengan cepat. . Isih, keseluruhan proses pengisihan boleh dilakukan [secara rekursif], supaya keseluruhan data menjadi urutan tersusun.
Isih cepat ialah versi jenis gelembung yang dipertingkatkan Keseluruhan prosesnya adalah untuk mengalih keluar dan menampal sesuatu, mengoyakkannya dan menampalnya, mengoyakkannya dan menampalnya, sehingga. semua elemen mencapai keadaan tertib.
Mula-mula ambil nombor daripada jujukan sebagai nombor asas, dan kemudian lakukan pembahagian saiz
Dalam proses pembahagian, semua nombor yang lebih besar daripada nombor ini diletakkan di sebelah kanannya, dan nombor yang lebih kecil daripada; atau sama dengannya adalah Letakkan semuanya ke kiri;
Ulang langkah kedua untuk selang kiri dan kanan sehingga hanya terdapat satu nombor dalam setiap selang, dan pengisihan selesai.
[4,1,6,2,9,3]
susunan ini sebagai contoh. 
import java.util.Arrays; public class QuickSortDemo { //四个步骤: //1.比较startIndex和endIndex,更喜欢理解为校验 //2.找出基准 //3.左边部分排序 //4.右边排序 public static void quickSort(int[] arr, int startIndex, int endIndex) { if (startIndex < endIndex) { //找出基准 int partition = partition(arr, startIndex, endIndex); //分成两边递归进行 quickSort(arr, startIndex, partition - 1); quickSort(arr, partition + 1, endIndex); } } //找基准 private static int partition(int[] arr, int startIndex, int endIndex) { int pivot = arr[startIndex]; int left = startIndex; int right = endIndex; //等于就没有必要排序 while (left != right) { while (left < right && arr[right] > pivot) { right--; } while (left < right && arr[left] <= pivot) { left++; } //找到left比基准大,right比基准小,进行交换 if (left < right) { swap(arr, left, right); } } //第一轮完成,让left和right重合的位置和基准交换,返回基准的位置 swap(arr, startIndex, left); return left; } //两数交换 public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void main(String[] args) { int[] a = {3, 1, 2, 4, 9, 6}; quickSort(a, 0, a.length - 1); //输出结果 System.out.println(Arrays.toString(a)); } }
[1, 2, 3, 4, 6, 9]
Atas ialah kandungan terperinci Temu bual Meituan: Sila tulis jadual cepat dengan tangan, saya terkejut!. 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



Anda mesti tahu Spring, jadi mari kita bincangkan tentang susunan semua pemberitahuan Aop Bagaimana Spring Boot atau Spring Boot 2 mempengaruhi susunan pelaksanaan aop? Beritahu kami tentang perangkap yang anda hadapi dalam AOP?

OOM bermakna terdapat kelemahan dalam program, yang mungkin disebabkan oleh kod atau konfigurasi parameter JVM. Artikel ini bercakap dengan pembaca tentang cara menyelesaikan masalah selepas proses Java mencetuskan OOM.

Bab tambahan bagi siri pengaturcaraan serentak Java, C A S (Banding dan tukar), masih dalam gaya yang mudah difahami dengan gambar dan teks, membolehkan pembaca berbual gila dengan penemuduga.

Jangan memandang rendah soalan peperiksaan bertulis banyak syarikat Terdapat perangkap dan anda boleh jatuh ke dalamnya secara tidak sengaja. Apabila anda menghadapi soalan ujian bertulis seperti ini tentang kitaran, saya cadangkan anda berfikir dengan tenang dan ambil langkah demi langkah.

Minggu lepas, seorang rakan dalam kumpulan pergi untuk temu bual dengan Ping An Insurance Hasilnya agak kesal, tetapi saya harap anda tidak akan berkecil hati, pada dasarnya semua soalan yang dihadapi temu duga boleh diselesaikan dengan menghafal soalan temuduga Ia telah diselesaikan, jadi sila bekerja keras!

Artikel ini akan melihat 5 soalan temu bual tentang kelas Java String Saya sendiri telah mengalami beberapa daripada lima soalan ini semasa proses temu duga.

Artikel ini mempunyai jumlah lebih daripada 30,000 perkataan, meliputi gambaran keseluruhan Linux, cakera, direktori, fail, keselamatan, tahap sintaks, pertempuran praktikal, arahan pengurusan fail, arahan penyuntingan dokumen, arahan pengurusan cakera, arahan komunikasi rangkaian, arahan pengurusan sistem, sandaran arahan mampatan, dsb. Membongkar mata pengetahuan Linux.

Meituan, lihat adakah anda boleh menjawabnya?
