Dalam tantangan sederhana ini Anda akan diberikan array input L
bilangan bulat non-negatif dan sejumlah nampan b
lebih besar dari 0 tetapi tidak lebih dari panjangnya L
. Kode Anda harus mengembalikan array baru M
yang panjangnya b
dan yang telah membuang array L
. Ini paling mudah dijelaskan dengan contoh.
L = [1,0,5,1]
dan b = 2
kembali M = [1,6]
.
L = [0,3,7,2,5,1]
dan b = 3
kembali M = [3,9,6]
.
Sejauh ini, sangat sederhana. Namun dalam pertanyaan b
ini tidak harus membelah len(L)
. Dalam hal ini, nampan terakhir hanya memiliki jumlah yang lebih sedikit untuk menebusnya.
Setiap bin kecuali mungkin yang terakhir harus memiliki jumlah angka yang sama yang berkontribusi terhadap totalnya. Nampan terakhir tidak boleh memiliki lebih banyak angka yang berkontribusi daripada nampan lainnya. Tempat sampah terakhir harus memiliki jumlah yang berkontribusi sebanyak mungkin sesuai dengan aturan lainnya.
L = [0,3,7,2,5,1]
dan b = 4
kembali M = [3,9,6,0]
. M = [10,8,0,0]
bukan keluaran yang dapat diterima karena nampan ketiga tidak memiliki nomor nama yang berkontribusi sebagai nampan 1
dan 2
.
L = [0,3,7,2,5]
dan b = 2
kembali M = [10,7]
. M = [3, 14]
bukan keluaran yang dapat diterima karena nampan terakhir akan memiliki 3
elemen yang berkontribusi padanya tetapi yang pertama hanya memiliki 2
.
L = [1,1,1,1,1,1,1]
dan b = 3
kembali M = [3,3,1]
.
Sebagai aturan terakhir, kode Anda harus dijalankan dalam waktu linier.
Anda dapat menggunakan bahasa atau perpustakaan apa saja yang Anda suka dan dapat berasumsi bahwa input disediakan dengan cara apa pun yang Anda rasa nyaman.
Ternyata ada beberapa input yang tidak bisa diselesaikan. Sebagai contoh [1,1,1,1,1]
dan b=4
. Kode Anda dapat menampilkan apa pun yang diinginkan untuk input tersebut.
your code must run in linear time
- Saya akan menemukan algoritma yang tidak mengikuti ini secara alami sangat aneh