Ποια τεστ-περιπτώσεις πρέπει να εξεταστούν για τη μέθοδο join; Ποιες βελτιστοποιήσεις μπορούν να προστεθούν;
Kotlin
// κράτηση(θέση_id, χρήστης_id) PostgreSQL Begin Transaction(read_commited) seat = select * from seats where id = seat_id for update if(seat == null || seat.status == "booked") rollback return error("Η θέση δεν είναι διαθέσιμη") insert into bookings (user_id, seat_id, status, created_at) values (user_id, ...) update seats set status = 'booked' where id = seat_id commit return success()
Γιατί στο Map το κλειδί είναι το κλειστό παρένθεση και η τιμή η ανοιχτή; Τι θα άλλαζε αν το κάναμε αντίστροφα; Ποια είναι η πολυπλοκότητα του containsValue σε σύγκριση με το get κατά το κλειδί;
/* ΕΠΙΛΟΓΗ αριστερά.K, αριστερά.V1, δεξιά.V2 ΑΠΟ αριστερά JOIN δεξιά ON αριστερά.K = δεξιά.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> αριστερά, List<Pair<K, V2>> δεξιά) { return null; } private static class Pair<A, B> { private A πρώτο; private B δεύτερο; Pair(A πρώτο, B δεύτερο) { this.πρώτο = πρώτο; this.δεύτερο = δεύτερο; } } private static class Triple<A, B, C> { private A πρώτο; private B δεύτερο; private C τρίτο; Triple(A πρώτο, B δεύτερο, C τρίτο) { this.πρώτο = πρώτο; this.δεύτερο = δεύτερο; this.τρίτο = τρίτο; } }
/*Δεδομένης μιας συμβολοσειράς, πρέπει να υλοποιηθεί μια λειτουργία για τον έλεγχο της ορθότητας της ένδειξης των παρενθέσεων. Κάθε ανοιχτή παρένθεση πρέπει να έχει μια αντίστοιχη κλειστή παρένθεση. Οι ανοιχτές και κλειστές παρενθέσεις πρέπει να βρίσκονται σε σωστή σειρά. Τύποι παρενθέσεων: "{", "}", "(", ")", "[", "]". Είσοδος: "([]){}[(()())()]" Αποτέλεσμα: true Είσοδος: "[(])" Αποτέλεσμα: false Επειδή οι παρενθέσεις 2 και 3 δηλώνονται λανθασμένα, το κλείσιμο ']' εμφανίζεται πριν από το κλείσιμο '(' */ public boolean check(String s){ Deque<Character> stack = new ArrayDeque<>(); Map<Character, Character> map = Map.of( ')', '(', ']', '[', '}', '{' ); // ((( for( char c : s.toCharArray()){ if(map.containsValue(c)){ stack.push(c); } else if(map.containsKey(c)){ if( stack.isEmpty() || stack.pop() != map.get(c)){ return false; } } } return stack.isEmpty(); }