Masalahnya melibatkan pengalihan keluar elemen dari kedua-dua belah senarai integer dengan cara yang 2*min lebih besar daripada maks .
1 2 |
|
Kita boleh menggunakan kaedah brute force. Kami boleh mencuba semua kemungkinan kepuasan dan mencari subarray terpanjang yang memenuhi syarat 2*min > maks. Kami juga boleh menggunakan kaedah pengaturcaraan dinamik untuk mencuba semua kemungkinan kombinasi subarray yang berlebihan dan tidak diingini.
Andaikan kita mempunyai tatasusunan, seperti "[250, 10, 11, 12, 19, 200]". Untuk mendapatkan penyelesaian terbaik kita perlu mengalih keluar elemen [250, 200] untuk membentuk tatasusunan [10, 11, 12, 19] di mana min ialah 10 dan maks ialah 19. Oleh itu 2*10 > 19. Kami mencetak daripada tatasusunan, jadi outputnya ialah 2.
Di bawah ialah program C++ yang menerangkan cara mengalih keluar bilangan minimum elemen daripada tatasusunan supaya dua kali nilai minimum lebih besar daripada nilai maksimum -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
1 |
|
Berikut ialah program C++ yang menerangkan cara mengalih keluar bilangan minimum elemen daripada tatasusunan supaya dua kali nilai minimum lebih besar daripada nilai maksimum, tetapi tanpa menggunakan Vector ADT -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
1 |
|
Di sini kami menggunakan kaedah brute force untuk mencari subarray terpanjang. Penyelesaian lain yang mungkin termasuk menyemak setiap subarray yang mungkin dengan berulang kali muncul elemen dari kedua-dua belah pihak dan kaedah lain. Walau bagaimanapun, pelaksanaannya adalah intensif buruh dan kurang dioptimumkan. Kerumitan masa di sini ialah O(n^2) kerana kami telah mengulangi semua sub-tatasusunan.
Atas ialah kandungan terperinci Program C++ untuk mengeluarkan elemen terkecil dari kedua-dua belah supaya nilai 2*minimum lebih besar daripada nilai maksimum. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!