Misalkan Anda memiliki satu set himpunan bilangan bulat. Mungkin saja beberapa set akan tumpang tindih (mis. Elemen berbagi). Anda bisa menghilangkan tumpang tindih dengan menghapus elemen dari set, tetapi beberapa dari mereka mungkin berakhir kosong; itu akan memalukan. Bisakah kita membuat semua set terpisah tanpa mengosongkannya?
Perhatikan bahwa dalam situasi ini, tidak pernah ada alasan untuk meninggalkan beberapa elemen dalam satu set, sehingga masalah ini selalu dapat diselesaikan dengan mengurangi setiap set menjadi hanya satu elemen. Itulah versi masalah yang kami selesaikan di sini.
Tugas
Tulis program atau fungsi, sebagai berikut:
Input : Daftar set bilangan bulat.
Output : Daftar bilangan bulat, dengan panjang yang sama dengan input, untuk yang:
- Semua bilangan bulat dalam output berbeda; dan
- Setiap integer dalam output adalah elemen dari set input yang sesuai.
Klarifikasi
- Anda dapat mewakili satu set sebagai daftar jika Anda ingin (atau apa pun yang sesuai untuk bahasa Anda), mengabaikan urutan elemen.
- Anda tidak harus menangani kasus di mana tidak ada solusi (yaitu akan selalu ada setidaknya satu solusi).
- Mungkin ada lebih dari satu solusi. Algoritme Anda harus selalu menghasilkan solusi yang valid, tetapi diizinkan untuk tidak deterministik (artinya tidak masalah jika mengambil solusi valid yang berbeda setiap kali berjalan).
- Jumlah bilangan bulat berbeda yang muncul dalam input, n , akan sama dengan jumlah set dalam input, dan untuk kesederhanaan, akan menjadi bilangan bulat dari 1 hingga n inklusif (karena nilai aktualnya tidak masalah). Terserah Anda apakah Anda ingin mengeksploitasi fakta ini atau tidak.
Testcases
[{1,2},{1,3},{1,4},{3,4}] -> [2,3,1,4] or [2,1,4,3]
[{1,3},{1,2,4},{2,3},{3},{2,3,4,5}] -> [1,4,2,3,5]
[{1,3,4},{2,3,5},{1,2},{4,5},{4,5}] -> [1,3,2,4,5] or [3,2,1,4,5] or [1,3,2,5,4] or [3,2,1,5,4]
Kondisi kemenangan
Suatu program membutuhkan kompleksitas waktu yang optimal untuk menang, yaitu jika suatu algoritma dengan kompleksitas waktu yang lebih baik ditemukan, itu mendiskualifikasi semua entri yang lebih lambat. (Anda dapat mengasumsikan bahwa bawaan bahasa Anda berjalan secepat mungkin, misalnya Anda dapat mengasumsikan bahwa bawaan penyortiran berjalan dalam waktu O (n log n). Demikian juga, asumsikan bahwa semua bilangan bulat dengan ukuran yang sebanding dengan n dapat ditambahkan, dikalikan, dll. (dalam waktu yang konstan.)
Karena kompleksitas waktu yang optimal kemungkinan cukup mudah diperoleh dalam sebagian besar bahasa, maka pemenang akan menjadi program terpendek di antara mereka yang memiliki kompleksitas waktu pemenang, diukur dalam byte.