algorithms_and_data_structures
1.0.0
Status Saat Ini | Statistik |
---|---|
Jumlah Masalah C++ | 188 |
Jumlah Masalah Python | 15 |
Rentetan Harian Saat Ini | 11 |
Pukulan Terakhir | 20/06/2019 - 21/06/2019 |
Garis Saat Ini | 23/06/2019 - 03/07/2019 |
Catatan: Beberapa kode di sini sudah lama dan ditulis ketika saya belajar C++. Mungkin saja kodenya tidak aman atau membuat asumsi yang salah. Silakan gunakan dengan hati-hati. Permintaan tarik selalu diterima.
Masalah | Larutan |
---|---|
Temukan simpul ke-n dari daftar tertaut dari yang terakhir. | nthToLastNode.cpp, nth_to_last_node.py |
Tambahkan angka yang setiap digit angkanya diwakili oleh simpul dari daftar tertaut. Berikan output sebagai daftar tertaut. | add_two_numbers_lists.cpp, add_two_numbers_list.py |
Tukar node dari daftar tertaut tanpa menukar data. | swapNodesWithoutSwappingData.cpp, swap_nodes_without_swapping_data.py |
Membalikkan daftar tertaut, secara iteratif dan rekursif | reverseLinkedListIterAndRecurse.cpp, reverse_linkedlist.py |
Diberikan daftar tertaut, balikkan node alternatif dan tambahkan di akhir. | membalikkanAlternateNodes.cpp |
Hanya diberi penunjuk simpul, hapus simpul tersebut dari daftar tertaut. | deleteNode.cpp |
Hapus seluruh daftar tertaut. | hapusLinkedlist.cpp |
Cetak simpul tengah daftar tertaut tanpa mengulangi dua kali. | printMiddleNode.cpp |
Tentukan apakah daftar tertaut merupakan pallindrom. | daftarPallindrome.cpp |
Masukkan data dalam daftar tertaut yang diurutkan. | masukkanInASortedLinkedList.cpp |
Tentukan titik potong (penggabungan) dari dua daftar tertaut yang diberikan. | findIntersectionPointOfLists.cpp,intersection_of_lists.py |
Kloning daftar tertaut yang memiliki penunjuk berikutnya dan acak, Kompleksitas Ruang - O(1). | cloneListWithRandomPtr.cpp, clone_list_with_random_ptr.py |
Mengingat daftar tertaut yang diurutkan dengan duplikat, hapus duplikat dalam satu iterasi. | hapusDuplikatDariSortedList.cpp |
Dengan menggunakan algoritma penemuan siklus Floyd, deteksi apakah daftar tertaut berisi siklus, jika memang berisi siklus, hapus loop tersebut | floyedCycleDetection.cpp |
Urutkan daftar tertaut menggunakan pengurutan gabungan | merge_sort.cpp |
Diberikan daftar tertaut tunggal L 0 -> L 1 -> … -> L n-1 -> L n . Susun kembali node-node pada list (pada tempatnya) sehingga list yang baru terbentuk adalah : L 0 -> L n -> L 1 -> L n-1 -> L 2 -> L n-2 .... | atur ulang_list.cpp |
Sertakan berisi implementasi header tunggal dari struktur data dan beberapa algoritma.
Struktur/Algoritma Data | Pelaksanaan |
---|---|
Makro dan Algoritma Generik seperti pertukaran, pembuatan angka acak | generik.h |
Implementasi Tumpukan Generik | tumpukan.h |
Implementasi Antrian Generik | antrian.h |
Implementasi Daftar Generik | daftar.h |
Implementasi Pohon Pencarian Biner | binerSearchTree.h |
Implementasi Penyortiran Cepat | quickSort.h |
Implementasi Pengurutan Gabungan | penggabungan Sort.h |
Implementasi Pengurutan Seleksi | seleksiSort.h |
Implementasi Penyortiran Gelembung | bubbleSort.h |
Implementasi Double LinkedList Kernel Linux | daftar_tertaut_ganda.h |
Implementasi Grafik Generik (Daftar Kedekatan) | grafik.h |
Implementasi Pengurutan Tumpukan | heap_sort.h |
Implementasi perpustakaan string saya sendiri | pstring.h pstring.cpp |
Masalah | Larutan |
---|---|
Tentukan apakah suatu bilangan merupakan pangkat 2. | power_of_2.cpp |
Tambahkan dua bilangan biner yang direpresentasikan sebagai string. | addBin.cpp |
Tentukan pangkat 2 berikutnya untuk suatu bilangan tertentu. | next_power_of_2.cpp |
Menggunakan manipulasi bit, tentukan apakah suatu bilangan merupakan kelipatan 3. | multiple_of_3.cpp |
Tentukan endianess mesin, cetak angka Endianess terbalik. | reverseEndianness.cpp |
Temukan paritas nomor yang diberikan. | temukan_paritas.cpp |
Terapkan perkalian cepat angka menjadi 7 menggunakan manipulasi bit. | kalikan_dengan_7.cpp |
Membalikkan bit bilangan bulat yang tidak ditandatangani (dua metode - Membalikkan sedikit demi sedikit & membagi dan menaklukkan). | reverseBitsOfAnInteger.cpp |
Fungsi kecil untuk menentukan posisi bit set paling kanan dalam bilangan bulat tertentu. | kanan_most_set_bit.cpp |
Diberikan suatu vektor bilangan, hanya satu bilangan yang muncul dalam jumlah ganjil, tentukan bilangan tersebut. | temukan_ganjil_satu_keluar.cpp |
Diberikan dua bilangan bulat, tentukan apakah jumlahnya akan menjadi interger overflow. | integerOverflow.cpp |
Berapa banyak operasi bit flip yang diperlukan untuk mengubah bilangan A menjadi B. | countNumberOfBitFlips.cpp |
Diberikan angka x dan dua posisi (dari sisi kanan) dalam representasi biner x, tuliskan fungsi yang menukar n bit kanan pada dua posisi tertentu dan mengembalikan hasilnya. Hal ini juga mengingat bahwa kedua set bit tidak tumpang tindih. | swapSetOfBits.cpp |
Tambahkan dua angka tanpa menggunakan operator aritmatika apa pun | tambahan_tanpa_operator.cpp |
Louise dan Richard bermain game. Mereka memiliki counter yang disetel ke N. Louise mendapat giliran pertama dan giliran bergantian setelahnya. Di dalam game, mereka melakukan operasi berikut:
| counter_game.cpp |
Tentukan apakah dua bilangan bulat mempunyai tanda yang berlawanan. | check_opposite_signs.cpp |
Tukar dua bit pada posisi p dan q dari bilangan bulat tertentu. | swapBits.cpp |
Periksa apakah suatu bilangan pangkat 4. | check_if_power_of_4.cpp |
Masalah | Larutan |
---|---|
Soal 1-1 : Edisi 6: Tulis algoritma untuk menentukan apakah suatu string memiliki karakter unik atau tidak. Bisakah kita melakukannya tanpa menggunakan struktur data tambahan? | 1-1-hasUniqueChars.cpp, 1-1-hasUniqueChars.py |
Masalah 1-2 : Edisi 5: Membalikkan string ketika Anda meneruskan string C yang diakhiri dengan nol. | 1-2-edi5-reverseString.cpp |
Soal 1-2 : Edisi 6: Diberikan dua string, tentukan apakah yang satu merupakan permutasi dari yang lain. | 1-2-perm-strings.cpp, 1-2-perm-strings.py |
Masalah 1-3 : Edisi 5: Tulis algoritma untuk menghapus karakter duplikat dari sebuah string. | 1-3-edi5-removeDuplikat.cpp |
Soal 1-3 : Edisi 6: URLify: Ganti semua spasi dalam string dengan '%20'. Lebih disukai di tempat | 1-3-URLify.cpp |
Soal 1-4 : Edisi 6: Diberikan sebuah string, tulislah sebuah fungsi untuk memeriksa apakah itu merupakan permutasi dari pallindrom. | 1-4-pallindrome-permutasi.cpp |
Soal 1-5 : Edisi 6: Ada tiga kemungkinan pengeditan yang dapat dilakukan pada string - Sisipkan karakter, Hapus karakter, Ganti karakter. Diberikan dua string, tentukan apakah string tersebut berjarak satu atau 0 edit. | 1-5-satu-edit-jauh.cpp |
Soal 1-6: Menerapkan metode untuk melakukan kompresi string dasar. Contoh string aabcccccaaa harus dikompresi menjadi a2b1c5a3 , namun jika string terkompresi lebih besar dari string asli, kembalikan string asli | 1-6-string-kompresi.cpp |
Soal 1-7: Putar matriks searah jarum jam (& berlawanan arah jarum jam) sebesar 90 derajat | 1-7-matriks-rotasi.cpp |
Soal 1-8: Tulislah algoritma sedemikian rupa sehingga jika suatu elemen matriks MxN adalah 0, seluruh baris dan kolomnya disetel ke 0. | 1-8-zero-matrix.cpp |
Soal 1-9: Diberikan dua string s1 dan s2, tentukan s2 adalah rotasi s1 hanya dengan menggunakan satu panggilan ke fungsi yang memeriksa apakah satu string merupakan rotasi string lainnya. | 1-9-string-rotasi.cpp |
Masalah 2-1: Hapus duplikat dari daftar tertaut yang tidak disortir . Bagaimana jika tidak ada buffer sementara yang diperbolehkan. | 2-1-hapus-dups.cpp |
Soal 2-2: Tentukan simpul ke- k dari simpul terakhir dari daftar tertaut tunggal. (Pendekatan Iteratif dan Rekursif) | 2-2-kthToLast.cpp |
Masalah 2-3: Menerapkan algoritma untuk menghapus sebuah node di tengah-tengah daftar tertaut tunggal | 2-3-hapus-node-tengah.cpp |
Soal 2-4: Partisi daftar tertaut di sekitar nilai x, semua node yang lebih kecil dari x berada sebelum semua node yang lebih besar dari sama dengan x | 2-4-partisi.cpp |
Soal 2-5: Anda memiliki dua nomor yang diwakili oleh daftar tertaut di mana setiap node berisi satu digit. Digit disimpan dalam urutan terbalik, sehingga digit 1 berada di bagian atas daftar. Tulis fungsi yang menambahkan dua angka dan mengembalikan jumlahnya sebagai daftar tertaut. Contoh:
| 2-5-tambahkan-daftar.cpp |
Soal 2-6: Tentukan apakah daftar tertaut merupakan palindrom (2 pendekatan berulang dan satu pendekatan rekursif | 2-6-palindrom.cpp |
Soal 2-7: Tentukan apakah dua daftar tertaut tunggal berpotongan, jika ya, kembalikan simpul yang berpotongan. Persimpangan ditentukan berdasarkan referensi, bukan nilai | 2-7-persimpangan.cpp |
Masalah 2-8: Mendeteksi apakah daftar tertaut memiliki perulangan, Temukan simpul awal perulangan dan hapus perulangan | 2-8-loop-deteksi.cpp |
Masalah | Larutan |
---|---|
Suku Fibonacci ke-N menggunakan teknik memoisasi yang berbeda | fibonacci.cpp |
Masalah Urutan Umum Terpanjang | lcs.cpp, long_common_subsequence.py |
Wiki Masalah Urutan Bersebelahan Nilai Maksimum | max_subsequence.cpp |
Nomor Catalan - Hitung jumlah kemungkinan Pohon Pencarian Biner dengan n kunci | catalan_number.cpp |
Hitung jumlah jalur unik dari sumber asal (0, 0) ke tujuan (m-1, n-1) dalam grid amxn. Anda hanya dapat bergerak ke arah bawah atau ke kanan. | jalur_unik.cpp |
0-1 Knapsack Problem: Bayangkan Anda adalah seorang pencuri dan Anda ingin mencuri barang-barang yang ruangannya penuh dengan barang-barang. Anda mempunyai ransel yang dapat menampung kapasitas maksimum dengan berat W, dan Anda ingin mengisinya sedemikian rupa sehingga nilainya maksimal. Menjadi pencuri yang cerdas, Anda mengetahui bobot dan nilai setiap barang di ruangan. Bagaimana cara Anda mengisi ransel Anda, sehingga Anda mendapatkan nilai semaksimal mungkin, sehingga Anda hanya dapat mengisi hingga kapasitas W. | 0_1_knapsack_problem.cpp |
Masalah | Larutan |
---|---|
Penjelajahan urutan Tingkat Iteratif Pohon menggunakan antrian | levelOrderTraversalIterative.cpp, level_order_tree_traversal_iterative.py |
Penjelajahan urutan Tingkat Rekursif dari Pohon | levelOrderTraversalRecursive.cpp, level_order_tree_traversal_recursive.py |
Penjelajahan Pohon ZigZag | zigZagTraversal.cpp, zig_zag_traversal.py |
Pendahulu dan Penerus dari node tertentu di Pohon Pencarian Biner | pendahulunyaPenerus.cpp |
Mengingat nilai dari dua node dalam Pohon Pencarian Biner, temukan Leluhur Bersama Terendah (LCA). Asumsikan kedua nilai tersebut ada di pohon. | leluhur-umum-terrendah.cpp, leluhur_umum-terrendah.py |
Diberikan pohon biner (tidak seperti pohon pencarian biner), temukan Leluhur Bersama Terendah (LCA). | pohon-biner-nenek moyang-terrendah.cpp |
Diberikan pohon biner, cetak semua jalur akar-ke-daun satu per baris. | printAllRootToLeafPath.cpp |
Tentukan apakah suatu pohon merupakan pohon penjumlahan. SumTree adalah Pohon Biner yang nilai sebuah node sama dengan jumlah node yang ada di subpohon kiri dan subpohon kanannya. Pohon kosong adalah SumTree dan jumlah dari pohon kosong dapat dianggap 0. Simpul daun juga dianggap sebagai SumTree. | sumTree.cpp |
Ubah sebuah pohon menjadi sumTree, sehingga setiap node merupakan jumlah subpohon kiri dan kanan dari pohon aslinya. | konversi_to_sum_tree.cpp, konversi_to_sum_tree.py |
Ubah array yang diurutkan menjadi pohon pencarian biner seimbang. | diurutkanArrayToBST.cpp |
Diberikan pohon biner, hasilkan jumlah setiap kolom vertikal. | vertikalSum.cpp |
Diberikan pohon biner dan kunci, simpul dengan kunci ada di pohon. Temukan semua leluhur dari node dengan kunci, leluhur di sini adalah node-node yang berada pada jalur lurus dari node ke root. | node_ancestors_in_root_path.cpp |
Diberikan pohon biner dan kunci, kembalikan level node dengan kunci. Root berada pada level 1, dan jika simpul dengan kunci tidak ada di pohon, kembalikan 0 | level_of_node.cpp |
Diberikan pohon biner, temukan semua jalur dari akar ke node, yang jumlahnya k. | k_sum_paths.cpp |
Diberikan pohon biner, cetak simpulnya tingkat demi tingkat dalam urutan terbalik. yaitu semua node yang ada di level terakhir harus dicetak terlebih dahulu diikuti oleh node di level kedua terakhir dan seterusnya. Semua node untuk level mana pun harus dicetak dari kiri ke kanan. | reverseLevelOrderTraversal.cpp |
Balikkan pohon biner, secara rekursif dan iteratif. | invert_a_tree.cpp |
Diberikan Pohon Pencarian Biner, temukan langit-langit dan lantai dari kunci tertentu di dalamnya. Jika kunci yang diberikan terletak di BST, maka floor dan ceil sama dengan kunci tersebut, jika tidak, ceil sama dengan kunci berikutnya yang lebih besar (jika ada) di BST dan floor sama dengan kunci besar sebelumnya (jika ada) di BST | lantai_ceil_bst.cpp |
Temukan elemen terkecil ke-k dalam pohon pencarian biner | kth_smallest.cpp |
Validasi apakah pohon biner yang diberikan adalah pohon pencarian biner. | validasi_bst.cpp |
Diberikan Pohon Pencarian Biner dan nomor target, kembalikan nilai true jika terdapat dua elemen dalam BST sehingga jumlahnya sama dengan target yang diberikan. | temukan_target_k.cpp |
Dengan adanya pohon pencarian biner yang tidak kosong dan nilai target, temukan nilai di BST yang paling dekat dengan target. Juga, perlu diperhatikan bahwa nilai target adalah floating point. Hanya akan ada satu nilai unik yang paling dekat dengan target. | nilai_bst_terdekat.cpp, nilai_bst_terdekat.py |
Diberikan pohon biner, melintasi praorder, buat keluaran string yang berisi nilai simpul dan tanda kurung. Node nol perlu diwakili oleh pasangan tanda kurung kosong "()". Dan Anda harus menghilangkan semua pasangan tanda kurung kosong yang tidak mempengaruhi hubungan pemetaan satu-ke-satu antara string dan pohon biner asli. Contoh dalam file kode | string_from_tree.cpp |
Masalah | Larutan |
---|---|
Implementasi algoritma Robin-Karp untuk pencarian string | robinKarpStringMatching.cpp |
Temukan permutasi berikutnya dari string tertentu, mis. mengatur ulang string yang diberikan sedemikian rupa sehingga string berikutnya yang secara leksikografis lebih besar daripada string yang diberikan | next_permutation.cpp |
Implementasi algoritma Z untuk pencocokan pola | z.cpp |
Uji kasus untuk pustaka string yang dibuat sendiri | pstring_test.cpp |
Dapatkan panjang kata terakhir dalam sebuah string. | panjang_dari_kata_terakhir.cpp |
Temukan perbedaan antara dua string. String t dihasilkan dengan mengacak string s secara acak dan kemudian menambahkan satu huruf lagi pada posisi acak. Tentukan karakter yang berbeda pada t | temukan_perbedaan.cpp |
Masalah | Larutan |
---|---|
Cetak isi matriks dalam urutan spiral | matriks_spiral_print.cpp |
Diberikan matriks berukuran M x N, putar matriks tersebut sebanyak R berlawanan arah jarum jam, dan tunjukkan matriks yang dihasilkan. | putar_matrix.cpp |
Memutar array berdasarkan r elemen (kiri atau kanan) | array_rotation.cpp |
Diberikan array interger yang berulang/tidak berulang, tentukan int pertama yang tidak berulang dalam array ini | first_non_repeating_int.cpp |
Di Quantumland, ada n kota yang diberi nomor dari 1 sampai n. Di sini, c i menunjukkan kota ke -i. Ada n−1 jalan di Quantumland. Di sini, c i dan c i+1 memiliki jalan dua arah di antara mereka untuk masing-masing i < n. Ada rumor bahwa Flatland akan menyerang Quantumland, dan ratu ingin menjaga keamanan tanahnya. Jalan antara ci i dan c i+1 aman jika ada penjaga di ci i atau c i+1 . Ratu telah menempatkan beberapa penjaga di beberapa kota, tapi dia tidak yakin apakah mereka cukup untuk menjaga keamanan jalan. Dia ingin mengetahui jumlah minimum penjaga baru yang perlu dia pekerjakan. Lihat komentar dalam solusi untuk detail input/output. | simpan_quantamland.cpp |
Anda diberi bilangan bulat N. Temukan digit dalam bilangan ini yang tepat membagi N (pembagian yang menyisakan 0 sebagai sisanya) dan tampilkan hitungannya. Untuk N=24, ada 2 digit (2 & 4). Kedua angka ini persis habis dibagi 24. Jadi jawaban kita adalah 2. Lihat lebih detail di komentar header file solusi. | temukanDigits.cpp |
Enkripsi dan kemudian dekripsi teks menggunakan Caeser Cipher. | caeser_cipher.cpp |
Enkripsi dan kemudian dekripsi teks menggunakan sandi Vigenère. | vigenere_cipher.cpp |
Hasilkan bilangan biner antara 1 hingga N secara efisien. | n_biner.cpp |
Menerapkan fungsi daya | power_function.cpp |
Masalah | Larutan |
---|---|
Cetak semua permutasi string. Contoh: Permutasi ABC adalah ABC, ACB, BCA, BAC, CAB, CBA | string_permutasi.cpp |
Algoritma Euclidean untuk mencari pembagi persekutuan terbesar dari dua bilangan. (Iteratif dan rekursif) | gcd.cpp |
Implementasikan pow(x,y) menggunakan pendekatan bagi dan taklukkan. Coba terapkan di O(logn) | pow.cpp |
Hitung faktorial dari bilangan besar, katakanlah 100 (akan memiliki 158 digit) | faktorial_of_large_num.cpp |
Hasilkan semua kemungkinan kata dari nomor yang dimasukkan pada papan tombol ponsel tradisional | telepon_digit.cpp |
Diberikan representasi string dari suatu angka, hapus n karakter dari string sedemikian rupa sehingga representasi angka tersebut serendah mungkin. | angka_yang mungkin_terendah.cpp |
Deteksi apakah suatu angka adalah angka bahagia. Suatu bilangan disebut bilangan bahagia jika barisan operasi dimana bilangan tersebut diganti dengan jumlah kuadrat digit-digitnya akhirnya menghasilkan 1. Suatu bilangan bukanlah bilangan bahagia jika kita berada dalam perulangan tak hingga ketika operasi di atas dilakukan. | happy_number.cpp |
Masalah | Larutan |
---|---|
Kami memiliki serangkaian n kutipan harga harian untuk suatu saham. Kita perlu menghitung rentang harga saham selama n hari. Rentang hari ke-i didefinisikan sebagai jumlah maksimum hari berturut-turut, dimana harga saham kurang dari atau sama dengan hari ke-i. Untuk harga saham {100, 60, 70, 65, 80, 85} rentangnya adalah {1, 1, 2, 1, 4, 5}. Span hari ke 1 selalu 1, nah untuk hari ke 2 stoknya ada di angka 60, dan tidak ada hari sebelumnya yang stoknya kurang dari 60. Jadi spannya tetap 1. Untuk hari ke 3, stoknya dihargai 70, jadi spannya adalah 2, seperti hari sebelumnya adalah 60, dan seterusnya. | stock_span_problem.cpp |
Diberikan ekspresi infiks, ubah menjadi ekspresi postfix, Contoh (A+B)*C --> AB+C* | infix_to_postfix.cpp |
Diberikan string yang hanya berisi karakter '(', ')', '{', '}', '[' dan ']', tentukan apakah string input valid. Tanda kurung harus ditutup dengan urutan yang benar, "( )" dan "()[]{}" semuanya valid tetapi "(]" dan "([)]" tidak. | valid_parenthesis.cpp |
Masalah | Larutan |
---|---|
Diberikan vektor yang diurutkan, kembalikan indeks pertama kemunculan suatu nilai dalam vektor, jika angka tidak ada, kembalikan -1 | first_occurrence_binary_search.cpp |
Temukan elemen berulang pertama dalam array bilangan bulat. Diberikan array bilangan bulat, temukan elemen berulang pertama di dalamnya. Kita perlu mencari elemen yang muncul lebih dari satu kali dan yang indeks kemunculan pertamanya paling kecil. | firstRepeatingElement.cpp |
Diberikan daftar bilangan bulat yang tidak diurutkan, A={a 1 ,a 2 ,…,a N }, Tentukan pasangan unsur yang mempunyai selisih mutlak terkecil di antara keduanya? Jika ada beberapa pasangan, temukan semuanya. | angka_terdekat.cpp |
Diberikan array yang diurutkan, tentukan indeks titik tetap dalam array ini. Jika array tidak memiliki titik tetap, kembalikan -1. Sebuah array mempunyai titik tetap ketika indeks elemen sama dengan indeks yaitu i == arr[i], Kompleksitas waktu yang diharapkan O(logn) | fixedPoint.cpp |
Temukan elemen maksimum dalam array yang mula-mula bertambah dan kemudian menurun. Input: arr[] = {8, 10, 20, 80, 100, 200, 400, 500, 3, 2, 1}, output : 500. Array mungkin juga bertambah atau berkurang. Kompleksitas ExpectTime adalah O(logn). | temukan Maksimum.cpp |
Diberikan suatu array bilangan bulat positif dan/atau negatif, carilah pasangan dalam array yang jumlahnya paling mendekati 0. | temukanClosestPairToZero.cpp |
Numeros, sang Artis, memiliki dua daftar A dan B, sehingga B merupakan permutasi dari A. Numeros sangat bangga dengan daftar tersebut. Sayangnya, saat memindahkannya dari satu pameran ke pameran lainnya, ada beberapa nomor yang tertinggal dari A. Bisakah Anda menemukan nomor yang hilang tersebut? Catatan:
| missingNumbers.cpp |
Temukan pasangan terdekat dari dua larik yang diurutkan. Diberikan dua larik yang diurutkan dan sebuah bilangan x, carilah pasangan yang jumlahnya paling dekat dengan x dan pasangan tersebut memiliki elemen dari setiap larik. Kita diberikan dua array ar1[0…m-1] dan ar2[0..n-1] dan sebuah bilangan x, kita perlu mencari pasangan ar1[i] + ar2[j] sehingga nilai absolut (ar1 [i] + ar2[j] – x) adalah minimum. | terdekatPairSorted.cpp |
Diberikan sebuah array A yang terdiri dari n elemen, carilah tiga indeks i, j dan k sehingga A[i]^2 + A[j]^2 = A[K]^2. O(n2) kompleksitas waktu dan O(1) kompleksitas ruang | squareSum.cpp |
Diberikan array yang tidak disortir arr[0..n-1] berukuran n, carilah subarray dengan panjang minimum arr[s..e] sedemikian rupa sehingga mengurutkan subarray ini akan membuat seluruh array terurut. | minLengthUnsortedArray.cpp |
Temukan bilangan yang hilang dalam Perkembangan Aritmatika | missingNumber2.cpp |
Temukan unsur persekutuan dalam 3 vektor yang diurutkan | commonIn3Arrays.cpp |
Temukan semua pasangan dengan jumlah tertentu dalam array/vektor yang tidak diurutkan | temukan_pasangan_dengan_jumlah.cpp |
Diberikan sebuah array, temukan elemen puncak di dalamnya. Elemen puncak adalah elemen yang lebih besar dari tetangganya. | puncak_elemen.cpp |
Diberikan array yang diurutkan dari bilangan bulat non-negatif yang berbeda, temukan elemen terkecil yang hilang di dalamnya. | terkecil_hilang.cpp |
Pindahkan semua angka nol pada vektor ke akhir | pindahkan_zeros.cpp |
Masalah | Larutan |
---|---|
Kedalaman Traversal Pertama suatu Grafik | dfsDemo.cpp |
Luas Traversal Pertama suatu Grafik | bfsDemo.cpp |
menghitung jarak terpendek dari posisi awal (Node S) ke seluruh node lain pada grafik menggunakan algoritma Dijkstra. | dijkstra-shortest-reach.cpp |
Hitung bobot total Pohon Rentang Minimum dari suatu graf tertentu (jumlah bobot sisi-sisi yang membentuk MST) menggunakan algoritma Prim | primsMST.cpp |
Cetak Pohon Rentang Minimum (MST) dari grafik tertentu menggunakan algoritma Kruskal. | kruskalMST.cpp |
Buat program untuk menghasilkan pengkodean Huffman untuk setiap karakter sebagai tabel. | huffman_encoding.cpp |
Cari kata tertentu di papan 2D yang berisi huruf. Kata tersebut dapat dibangun dengan melintasi sel horizontal atau vertikal yang berdekatan secara berurutan. Dalam suatu rangkaian pembentukan kata, huruf pada kedudukan yang sama tidak boleh digunakan lebih dari satu kali. (Periksa bagian atas file untuk melihat contohnya.) | grid_word_search.cpp |
Diberikan layar 2D, lokasi piksel dan nilai warna baru yang harus diisi, ganti warna piksel dan semua piksel berwarna sama yang berdekatan (atas, bawah, kiri, kanan) dengan warna baru. Ini sama dengan penimbunan banjir (ingat simbol ember) suatu wilayah di MS-PAINT. | banjir_isi.cpp |
Masalah | Larutan |
---|---|
Diberikan dua larik bilangan bulat, A dan B, masing-masing berisi N bilangan bulat. Anda bebas mengubah urutan elemen dalam array. Apakah terdapat kemungkinan permutasi A', B' pada A dan B, sehingga A' i +B' i ≥ K untuk semua i, dengan A' i menandakan elemen ke -i dalam larik A' dan B' i melambangkan saya elemen ke dalam array B'. | dua_array.cpp |
John menerima perintah. Pesanan ke-i dilakukan oleh pelanggan ke- i pada waktu yang sama dan memerlukan waktu yang lama untuk memprosesnya. Bagaimana urutan pelanggan mendapatkan pesanannya? (lihat detail lebih lanjut di komentar solusi) | pesanan_pesanan.cpp |
Masalah | Larutan |
---|---|
Anda diberikan string digit (misalnya "1234", "567" dll), berikan semua kemungkinan kombinasi huruf yang dapat kita hasilkan dari string digit ini, berdasarkan pemetaan yang kita lihat pada dialpad telepon/ponsel. Jika Anda mengetik SMS di ponsel model lama, Anda pasti tahu. Misalnya "1" dipetakan ke "abc", 2 dipetakan ke "def". Anda dapat merujuk pada gambar..
| dialpad_combinations.cpp |
Menerapkan pemesinan pola wildcard dengan dukungan untuk '?' & ' '.
| wild_card_matching.cpp |
Diberikan papan 2D dan daftar kata dari kamus, temukan semua kemungkinan kata di papan dari daftar. (Periksa contoh dalam solusi) | kata_pencarian.cpp |
Masalah | Larutan |
---|---|
Mengingat array bilangan bulat yang diurutkan tanpa duplikat, kembalikan ringkasan rentangnya. Misalnya, jika diberikan [0,1,2,4,5,7], kembalikan ["0->2","4->5","7"]. | ringkasan_rentang.cpp |
Diberikan matriks 2D, dengan properti berikut
| cari2DII.cpp |
Diberikan array bilangan bulat yang tidak disortir, carilah bilangan bulat positif pertama yang hilang. Contoh: [1,2,0] harus menghasilkan 3 dan [3,4,-1,1] harus menghasilkan 2. Kompleksitas waktu yang diharapkan O(n) dan solusi harus menggunakan ruang konstan | firstMissingPositiveNum.cpp |
Diberikan susunan bilangan bulat yang tidak diurutkan, tentukan panjang barisan elemen berurutan terpanjang. Misalnya: Diberikan [100, 4, 200, 1, 3, 2]. Urutan elemen terpanjang berturut-turut adalah [1, 2, 3, 4]. Kembalikan panjangnya: 4. Algoritma harus berjalan dalam kompleksitas O(n). | terpanjangConsecutiveSeq.cpp |
Diberikan dua array bilangan bulat yang diurutkan nums1 dan nums2, gabungkan nums2 ke dalam nums1 sebagai satu array yang diurutkan. Anda dapat berasumsi bahwa nums1 memiliki cukup ruang (ukuran yang lebih besar atau sama dengan m + n) untuk menampung elemen tambahan dari nums2. Banyaknya elemen yang diinisialisasi dalam angka1 dan angka2 masing-masing adalah m dan n. | mergeArrays.cpp |
Mengingat array bilangan bulat non-negatif, Anda awalnya diposisikan pada indeks pertama array. Setiap elemen dalam larik mewakili panjang lompatan maksimum Anda pada posisi tersebut. Tentukan apakah Anda dapat mencapai indeks terakhir. Misalnya:
| jumpGame.cpp |
Diberikan bilangan bulat positif, kembalikan judul kolom terkait seperti yang muncul di lembar Excel. Misalnya 1 -> A, 2 -> B,...26 -> Z, 27 -> AA, 28 -> AB, ...705 -> AAC | excelColSheetTitle.cpp |
Diberikan nomor array, tulis fungsi untuk memindahkan semua angka 0 ke akhir sambil mempertahankan urutan relatif elemen bukan nol. Misalnya, jika diberi angka = [0, 1, 0, 3, 12], setelah memanggil fungsi Anda, angkanya harus [1, 3, 12, 0, 0]. | moveZeroes.cpp |
Diberikan array bilangan bulat, cari tahu apakah array tersebut berisi duplikat. Fungsi harus mengembalikan nilai benar jika ada nilai yang muncul setidaknya dua kali dalam array, dan harus mengembalikan nilai salah jika setiap elemen berbeda. | berisi Duplikat.cpp |
Diberikan sebuah daftar, putar daftar ke kanan sebanyak k tempat, dimana k adalah non-negatif. Misalnya:
| putarList.cpp |
Diberikan dua kata, kata1 dan kata2, tentukan jumlah langkah minimum yang diperlukan untuk mengubah kata1 menjadi kata2. (setiap operasi dihitung sebagai 1 langkah.). Anda memiliki 3 operasi berikut yang diizinkan pada sebuah kata:
| edit Jarak.cpp |
Diberikan pohon biner, Isi setiap penunjuk berikutnya untuk menunjuk ke simpul kanan berikutnya. Jika tidak ada simpul kanan berikutnya, penunjuk berikutnya harus disetel ke NULL. Awalnya, semua pointer berikutnya diatur ke NULL. Anda hanya dapat menggunakan spasi tambahan yang konstan. Anda dapat berasumsi bahwa ini adalah pohon biner sempurna (yaitu, semua daun berada pada level yang sama, dan setiap orang tua memiliki dua anak). | connectNextPointers.cpp |
Diberikan n pasang tanda kurung, tulislah sebuah fungsi untuk menghasilkan semua kombinasi tanda kurung yang berbentuk baik. Misalnya, jika diketahui n = 3, himpunan solusinya adalah "((()))", "(()())", "(())()", "()(())", "( )()()" | menghasilkan_parentesis.cpp |
Diberikan sebuah array yang berisi n angka berbeda yang diambil dari 0, 1, 2, ..., n, carilah angka yang hilang dari array tersebut. Misalnya, Diberikan angka = [0, 1, 3] menghasilkan 2. | nomor_hilang.cpp |
Misalkan array yang diurutkan diputar pada poros yang tidak Anda ketahui sebelumnya. (yaitu, 0 1 2 4 5 6 7 mungkin menjadi 4 5 6 7 0 1 2). Temukan elemen minimum. Anda mungkin berasumsi tidak ada duplikat dalam array. | temukan_min_rotated.cpp |
Diberikan sebuah array S yang terdiri dari n bilangan bulat, temukan tiga bilangan bulat di S sedemikian rupa sehingga jumlahnya paling dekat dengan bilangan tertentu, target. Kembalikan jumlah ketiga bilangan bulat. Anda mungkin berasumsi bahwa setiap masukan mempunyai tepat satu solusi. | tigaSumClosest.cpp |
Diberikan n bilangan bulat non-negatif a 1 , a 2 , ..., a n , yang masing-masing mewakili sebuah titik pada koordinat (i, a i ). n garis vertikal ditarik sedemikian rupa sehingga kedua titik ujung garis i berada di (i, a i ) dan (i, 0). Carilah dua garis yang bersama sumbu x membentuk suatu wadah, sehingga wadah tersebut berisi air paling banyak. Catatan: Anda tidak boleh memiringkan wadahnya. | maxArea.cpp |
Mengingat pohon biner hanya berisi angka 0-9, setiap jalur akar-ke-daun dapat mewakili sebuah angka. Contohnya adalah jalur akar-ke-daun 1->2->3 yang mewakili bilangan 123. Temukan jumlah total semua bilangan akar-ke-daun. Contoh dalam komentar solusi | sumRootToLeafNumbers.cpp |
Katakanlah Anda memiliki array yang elemen ke-i-nya adalah harga saham tertentu pada hari ke-i. Jika Anda hanya diperbolehkan menyelesaikan paling banyak satu transaksi (misalnya membeli satu dan menjual satu lembar saham), rancanglah algoritma untuk mendapatkan keuntungan maksimal. | maxProfitStock.cpp |
Mengingat kisi amxn berisi bilangan non-negatif, carilah jalur dari kiri atas ke kanan bawah yang meminimalkan jumlah semua bilangan di sepanjang jalurnya. Catatan: Anda hanya dapat bergerak ke bawah atau ke kanan kapan saja. | minPath.cpp |
Hitung banyaknya bilangan prima yang kurang dari bilangan non-negatif, n. | countPrimes.cpp |
Temukan semua kemungkinan kombinasi k angka yang berjumlah n, mengingat hanya angka dari 1 sampai 9 yang dapat digunakan dan setiap kombinasi harus berupa kumpulan angka yang unik. Pastikan nomor-nomor dalam kumpulan diurutkan dalam urutan menaik. Contoh : untuk k = 3, n = 9 hasilnya adalah [[1,2,6], [1,3,5], [2,3,4]], begitu pula untuk k = 3, n = 7, hasilnya akan menjadi [[1,2,4]]. | kombinasiSum3.cpp |
Diberikan bilangan bulat non-negatif, jumlahkan semua digitnya berulang kali hingga hasilnya hanya memiliki satu digit. Contoh: Diketahui bilangan = 38, maka prosesnya seperti: 3 + 8 = 11, 1 + 1 = 2. Karena 2 hanya mempunyai satu digit, kembalikan. Tindak lanjut: Bisakah Anda melakukannya tanpa loop/rekursi apa pun di runtime O(1)? | addDigits.cpp |
Diberikan sebuah matriks dengan nilai sel 0 atau 1. Temukan panjang jalur terpendek dari (a1, b1) ke (a2, b2), sehingga jalur hanya dapat dibuat melalui sel yang memiliki nilai 1 dan Anda hanya dapat melakukan perjalanan dalam 4 kemungkinan arah, yaitu kiri, kanan, atas dan bawah. | jalur_terpendek_maze.cpp |
Jarak Hamming antara dua bilangan bulat adalah jumlah posisi di mana bit-bit yang bersesuaian berbeda. Diberikan dua bilangan bulat x dan y, hitung jarak Hamming. | hamming_distance.cpp |
Diberikan dua pohon biner dan bayangkan ketika Anda menempatkan salah satunya untuk menutupi yang lain, beberapa simpul dari kedua pohon tersebut tumpang tindih sementara yang lain tidak. Anda perlu menggabungkannya menjadi pohon biner baru. Aturan penggabungannya adalah jika dua node tumpang tindih, jumlahkan nilai node sebagai nilai baru dari node yang digabungkan. Jika tidak, simpul NOT null akan digunakan sebagai simpul pohon baru. | merge_trees.cpp |
Tulis fungsi yang mengambil string sebagai input dan hanya membalikkan vokal string. | reverse_vowels.cpp |
Diberikan sebuah string, urutkan dalam urutan menurun berdasarkan frekuensi karakter. Misalnya:
| sortCharByFrequency.cpp |
Produk Array Kecuali Diri Sendiri. Diberikan array n bilangan bulat dimana n > 1, nums, kembalikan output array sedemikian rupa sehingga output[i] sama dengan produk semua elemen nums kecuali nums[i]. | produk_kecuali_diri.cpp |
Mengingat array yang diurutkan, hapus duplikat di tempatnya dan kembalikan panjang yang baru. Tidak masalah apa yang ada dalam array di luar ukuran elemen unik. Kompleksitas ruang O(1) dan kompleksitas waktu O(n) yang diharapkan. | hapus_duplikat.cpp |
Hitung jumlah pulau dalam satu grid. Diberikan grid yang mewakili 1 sebagai badan daratan, dan 0 sebagai badan air, tentukan jumlah pulau (detail lebih lanjut di komentar soal) | count_islands.cpp |
Temukan median dari aliran data. Rancang struktur data yang mendukung addNum untuk menambahkan angka ke aliran, dan findMedian untuk mengembalikan median dari angka yang terlihat sejauh ini. Selain itu, jika jumlah bilangannya genap, kembalikan rata-rata dari dua elemen tengah, kembalikan median jika tidak. | median_stream.cpp |
Hapus jumlah minimum tanda kurung yang tidak valid agar string masukan valid. Kembalikan semua hasil yang mungkin. Catatan: String input mungkin berisi huruf selain tanda kurung (dan) | Remove_invalid_parenthesis.cpp |
Diberi array dan nilai, hapus semua contoh nilai itu di tempat dan kembalikan panjang baru. Jangan mengalokasikan ruang ekstra untuk array lain, Anda harus melakukan ini dengan memodifikasi array input di tempat dengan memori ekstra O (1). Urutan elemen dapat diubah. Tidak peduli apa yang Anda tinggalkan di luar panjang baru. | lepas_element.cpp |
Temukan persimpangan dua array/vektor, mengingat dua vektor menemukan hasil interaksi mereka. Hasilnya seharusnya hanya berisi karakter unik dan dapat dalam urutan apa pun | intersection_of_array.cpp |
Diberi pola dan string str, temukan jika STR mengikuti pola yang sama. Di sini ikuti berarti kecocokan penuh, sehingga ada keagungan antara huruf dalam pola dan kata yang tidak kosong dalam str. contoh: | |
pola = "abba", str = "anjing kucing kucing" harus kembali benar. | |
pola = "abba", str = "ikan kucing kucing" harus kembali salah. | |
pola = "aaaa", str = "anjing kucing kucing" harus kembali salah. | |
pola = "abba", str = "anjing anjing anjing" harus kembali salah. | word_pattern.cpp |
Anda diberikan vektor angka, di mana setiap angka mewakili | |
Harga stok pada hari itu. Jika Anda diizinkan untuk hanya menyelesaikannya | |
satu transaksi per hari (yaitu membeli satu dan menjual satu stok), desain | |
algoritma untuk menemukan laba maksimum. | Best_Time_to_buy_sell.cpp |
Diberikan kalimat, balikkan urutan karakter dalam setiap kata dalam kalimat sambil tetap mempertahankan whitespace dan urutan kata awal. | |
Contoh: | |
Input: Dia suka cokelat | |
Output: EHS Sevol Etalocohc | reverse_words.cpp |