Jika Anda memiliki wawancara yang akan datang di perusahaan seperti Google atau Amazon (dan banyak lainnya ...) yang Anda tahu akan mengajukan pertanyaan teknis, maka Anda telah datang ke tempat yang baik untuk mempersiapkan diri! Tercantum dalam readme ini adalah sekelompok pertanyaan ilmu komputer teknis yang semuanya akan dijawab di dalam paket/kelas kelas terpisah. Setiap solusi juga dapat mencakup file demo terkait yang akan berisi kelas utama dan demo solusi itu, disarankan untuk bermain -main dengan ini dan mempelajari semua kasus sudut!
Tidak terorganisir seperti ini tanpa alasan! Dianjurkan untuk memiliki pemahaman yang baik tentang berbagai struktur data dan jenis dan pencarian sebelum beralih ke masalah wawancara umum. Ini akan menjadi alat Anda untuk membantu memahami dan menyelesaikan masalah wawancara yang berbeda. Melakukan semua jenis adalah opsional, tetapi disarankan agar Anda memiliki pemahaman yang baik tentang minimum satu (nlogn).
Readme ini dirancang agar sederhana dan cepat untuk menelusuri hanya menggunakan Control-F. Jika Anda dengan cepat ingin melompat ke suatu tempat di ReadMe, cukup cari (menggunakan Control-F) untuk itu dalam tanda kurung persegi. Pastikan pencarian Anda tidak sensitif pada kasus!
Opsi Pencarian Cepat:
Jika Anda menemukan kesalahan dalam kode saya, dan akan ada kesalahan, cobalah dan perbaiki sebagai latihan! Setelah Anda berpikir Anda memiliki implementasi yang berfungsi, tembak saya permintaan tarik, saya selalu menghargai bantuan ramah :) Jika Anda memiliki ide untuk hal -hal yang ingin Anda tambahkan, jangan ragu untuk mengkode dan menembak saya permintaan tarik, tolong jaga kode Anda bersih - kode bersih atau tidak ada kode sama sekali. Sekali lagi saya selalu menghargai bantuan dan terima kasih sebelumnya :)
public Queue ( int maxSize )
public void enqueue ( int data )
public int dequeue ()
public int peek ()
public boolean isFull ()
public boolean isEmpty ()
public String toString () public StackQueue ()
public StackQueue ( Type [] list )
public void enqueue ( Type obj )
public Type dequeue ()
public boolean isEmpty () public LinkedList ()
public Node < Type > find ( Type data )
public int getLength ()
public void addDataAtHead ( Type data )
public void addNodeAtHead ( Node < Type > nextNode )
public Node < Type > deleteHead () throws ...
public String toString ()Lakukan hal yang persis sama dengan pertanyaan 2, tetapi gunakan Doublelinkedlist. Anda akan membutuhkan kelas simpul baru
Membalikkan daftar singlylinked, header metode seharusnya terlihat seperti:
public void reverse () // put this method inside your LinkedList class public boolean cyclic () // put this method inside your LinkedList class public Stack ()
public Type pop ()
public void push ( Type data )
public Type peek ()
public String toString () public Heap ( int initialSize )
public Heap ( int [] initialValues )
public void add ( int integer )
public boolean delete ( int integer )
public int peek ()
public int pop ()
public boolean contains ( int integer )
public boolean isEmpty ()
public int size () public PriorityQueue ( int initialSize )
public PriorityQueue ( int [] list )
public void enqueue ( int data )
public int dequeue ()
public int peek ()
public boolean isEmpty () public BinarySearchTree ( Integer data )
public BinarySearchTree ()
public TreeNode find ( Integer searchKey )
public void insert ( TreeNode insertNode )
public boolean delete ( Integer searchKey ) // return true if object deleted, false if object not in list
public void inOrderTraversal ()
public void preOrderTraversal ()
public void postOrderTraversal ()
public TreeNode smallest ()
public TreeNode biggest ()Untuk segala macam, analisis kecepatan menggunakan notasi BIG-O. Program segala macam metode statis di kelas individu yang masing -masing memiliki metode utama yang menguji jenisnya
private static void bubbleSort ( int [] list ) private static void selectionSort ( int [] list ) private static void insertionSort ( int [] list ) private static void mergeSort ( int [] list ) private static void quickSort ( int [] list ) private static void shellSort ( int [] list ) private static void countingSort ( int [] list , int startRange , int endRange ) private static void radixSort ( int [] list ) private static void bucketSort ( int [] list ) private static void heapSort ( int [] list ) private static int binarySearchArray ( int [] list , int searchKey )[P1] Menerapkan faktorial secara rekursif. Laksanakan lagi, tetapi kali ini menggunakan rekursi ekor. Apa itu rekursi ekor? Apakah Java dioptimalkan untuk rekursi ekor?
[P2] Selesaikan menara terkenal masalah Hanoi. Apakah itu rekursif ekor? Mengapa atau kenapa tidak?
[P3] Dengan asumsi saya memberi Anda sejumlah angka, katakanlah mereka mewakili harga saham, temukan saya uang paling banyak yang dapat Anda hasilkan hari itu dengan membeli dan menjual satu saham. Jika stok turun sepanjang hari, Anda harus menemukan saya paling sedikit uang yang bisa saya hilangkan hari itu. Metode header seharusnya terlihat seperti:
private static int bestStockTrade ( int [] stockPrices ) throws ...[P4] Diberi array bilangan bulat, misalnya [1, 2, 3, 4], mengembalikan array di mana pada setiap indeks Anda mendapatkan hasil dari pengalikan dengan semua nilai lainnya. Misalnya. [1, 2, 3, 4] -> [2x3x4, 1x3x4, 1x2x4, 1x2x3]. Jangan gunakan divisi. Metode header seharusnya terlihat seperti:
private static int [] productAllButMe ( int [] data ) throws ...[P5] Diberi berbagai bilangan bulat, apa produk maksimum yang bisa Anda dapatkan dari mengalikan 3 bilangan bulat. Metode header seharusnya terlihat seperti:
private static int productOfThree ( int [] data ) throws ...[P6] Dengan beragam pasangan bilangan bulat, tulis fungsi yang melewati dan melihat bagian -bagian garis waktu mana yang tertutup. Misalnya. Mengingat array [(1,4), (2,7), (9,11), (1,3), (12,14)] -> [(1,7), (9,14)]. Anda bisa membayangkan ini bermanfaat jika kami memiliki daftar jadwal semua orang dan kami ingin melihat kapan semua orang bebas. Untuk representasi input yang sebenarnya, gunakan kelas berikut:
class Schedule {
public int startTime ;
public int endTime ;
public Schedule ( int startTime , int endTime ) {
this . startTime = startTime ;
this . endTime = endTime ;
}
@ Override
public String toString () {
return "(" + startTime + " , " + endTime + ")" ;
}
}Untuk header metode:
private static List < Schedule > scheduler ( List < Schedule > schedules )[P7] Diberi berbagai orang, di mana seseorang diwakili oleh starttime dan finishtime untuk shift kerja mereka, mengembalikan daftar sesingkat mungkin dari orang -orang di mana orang -orang itu melihat semua orang lain selama shift mereka. Misalnya, jika diberikan orang -orang ini (1, 2), (2, 10), (5, 6) maka Anda harus kembali (2, 10) karena orang ini melihat orang lain selama shift -Nya. Jika diberikan (1, 5), (4, 10), (2, 3), (11, 13) -> (1, 5), (11, 13). Untuk representasi orang yang sebenarnya, gunakan kelas berikut:
class Person {
public int startTime ;
public int finishTime ;
public Person ( int startTime , int finishTime ) {
this . startTime = startTime ;
this . finishTime = finishTime ;
}
@ Override
public String toString () {
return "(" + startTime + " , " + finishTime + ")" ;
}
}Untuk header metode:
private static List < Person > selectPeople ( List < Person > people ) throws ...[P8] Diberi berbagai bilangan bulat, di mana dijamin ada satu nomor yang tidak digandakan, temukan angka itu. Perhatikan bahwa dalam daftar angka digabungkan ini, hanya 1 nomor yang tidak memiliki duplikat, dan setiap nomor lainnya memiliki satu dan hanya satu duplikat. Input yang mungkin: [1, 2, 2, 3, 3, 4, 4], [2], [3, 7, 3] dll ...
Untuk header metode:
private static int uncoupledInteger ( int [] list ) Poin tambahan: Bisakah Anda melakukannya dalam memori konstan dan waktu linier?
[P9] Diberi string yang penuh dengan pembatas, periksa apakah string memiliki pembatas yang seimbang. Satu -satunya pembatas yang akan kita khawatirkan dalam masalah ini adalah sebagai berikut: [] {} (). Tidak ada karakter lain dalam string ini kecuali untuk pembatas. String berikut seimbang dan harus mengembalikan true: "", "()", "{} () []", "([{}])". String berikut tidak seimbang dan harus mengembalikan FALSE: "[", "{}}", "{{]}", "{[}]"
Untuk header metode:
private static boolean balancedDelimiters ( String delimiters ) [P10] Diberi berbagai bilangan bulat dan jumlah target, buat fungsi yang mengembalikan benar jika jumlah target adalah jumlah dari dua bilangan bulat dalam array. Misalnya, mengingat array [1, 2, 3, 4, -100, 0, 0] dan target 5 itu harus mengembalikan true karena 4 + 1 = 5. Perhatikan bahwa jika array yang sama diberikan, tetapi targetnya adalah 8, jawabannya akan kembali salah. Anda tidak dapat menambahkan bilangan bulat ke dirinya sendiri untuk menghasilkan target, Anda harus menemukan dua bilangan bulat terpisah. Perhatikan bahwa kedua bilangan bulat yang terpisah ini dapat memiliki nilai yang sama, misalnya. Jika array yang sama diberikan tetapi 0 diberikan sebagai target, itu harus mengembalikan true karena ada dua bilangan bulat dalam array yang jumlahnya menjadi 0 - 0 dalam indeks ke -5 dan 0 dalam indeks ke -6.
Untuk header metode:
private static boolean targetSummable ( int [] array , int target )