Αυτή η ανάρτηση χειρίζεται την πρώτη λύση του μαθήματος 4 χρησιμοποιώντας python. Το θέμα του μαθήματος 4 είναι τα «Στοιχεία μέτρησης». Για πρόσβαση στο πρόβλημα, κάντε κλικ στον παρακάτω σύνδεσμο.
Περιγραφή των εργασιών
Ένας μικρός βάτραχος θέλει να φτάσει στην άλλη πλευρά ενός ποταμού. Ο βάτραχος βρίσκεται αρχικά σε μια όχθη του ποταμού (θέση 0) και θέλει να φτάσει στην απέναντι όχθη (θέση Χ+1). Τα φύλλα πέφτουν από ένα δέντρο στην επιφάνεια του ποταμού.
Σας δίνεται ένας πίνακας Α που αποτελείται από N ακέραιους αριθμούς που αντιπροσωπεύουν τα φύλλα που πέφτουν. Το A[K] αντιπροσωπεύει τη θέση όπου ένα φύλλο πέφτει τη στιγμή K, μετρούμενη σε δευτερόλεπτα.
Ο στόχος είναι να βρεθεί η πιο πρώιμη στιγμή που ο βάτραχος μπορεί να πηδήξει στην άλλη πλευρά του ποταμού. Ο βάτραχος μπορεί να διασχίσει μόνο όταν εμφανίζονται φύλλα σε κάθε θέση κατά μήκος του ποταμού από το 1 έως το Χ (δηλαδή, θέλουμε να βρούμε την πιο πρώιμη στιγμή που όλες οι θέσεις από το 1 έως το Χ καλύπτονται από φύλλα). Μπορείτε να υποθέσετε ότι η ταχύτητα του ρεύματος στο ποτάμι είναι αμελητέα μικρή, δηλαδή τα φύλλα δεν αλλάζουν τη θέση τους μόλις πέσουν στο ποτάμι.
Για παράδειγμα, σας δίνεται ακέραιος X = 5 και ο πίνακας A έτσι ώστε:
A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
Στο δεύτερο 6, ένα φύλλο πέφτει στη θέση 5. Αυτή είναι η πρώτη φορά που εμφανίζονται φύλλα σε κάθε θέση πέρα από τον ποταμό.
Γράψτε μια συνάρτηση:
def λύση (X, A)
ότι, δεδομένου ενός μη κενού πίνακα Α που αποτελείται από N ακέραιους και ακέραιο X, επιστρέφει τον πρώιμο χρόνο που ο βάτραχος μπορεί να πηδήξει στην άλλη πλευρά του ποταμού.
Εάν ο βάτραχος δεν μπορεί ποτέ να πηδήξει στην άλλη πλευρά του ποταμού, η συνάρτηση θα πρέπει να επιστρέψει −1.
Για παράδειγμα, δίνεται X = 5 και πίνακας A έτσι ώστε:
A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
η συνάρτηση θα πρέπει να επιστρέψει 6, όπως εξηγήθηκε παραπάνω.
Γράψτε έναν αποδοτικό αλγόριθμο για τις ακόλουθες παραδοχές:
- Τα N και X είναι ακέραιοι εντός της περιοχής [1..100.000].
- κάθε στοιχείο του πίνακα Α είναι ένας ακέραιος στην περιοχή [1..X].
Πνευματικά δικαιώματα 2009–2020 από την Codility Limited. Ολα τα δικαιώματα διατηρούνται. Απαγορεύεται η μη εξουσιοδοτημένη αντιγραφή, δημοσίευση ή αποκάλυψη.
Σημείο κλειδί
- Έχετε ήδη μάθει πώς να έχετε αποτελεσματικότητα στην επίλυση προβλημάτων.
- Επίσης, μπορείτε να μετρήσετε το στοιχείο μέσω ενός απλού και ισχυρού αλγορίθμου γραμμικής αναζήτησης.
Λύση (με χρήση Python)
def solution(X, A): leaf_check, sum_step = [False] * X, 0 for sec, fall in enumerate(A): if(fall > X): continue if(not(leaf_check[fall-1])): leaf_check[fall-1] = True sum_step += 1 if(sum_step == X): return sec return -1
Χρησιμοποιήστε την παραπάνω λύση για αναφορά.
Σας συνιστούμε να γράψετε τον δικό σας πηγαίο κώδικα.
Σχετική ανάρτηση
[Codility] Μάθημα-04.2: MaxCounters
Το πρόβλημα με το όνομα «MaxCounters αντιμετωπίζεται μέσω αυτής της ανάρτησης. Η διεύθυνση URL για την επιβεβαίωση της αρχικής εργασίας είναι η ακόλουθη.medium.com»