¿Es Dart bueno para estructuras de datos y algoritmos?
Sí. Es tipado y basado en clases, de forma parecida a Java o C#, así que una clase Node<T> con un next que admite null es exactamente lo que parece, y dart:collection cubre más que la mayoría de las bibliotecas estándar. Conviene saber dos cosas: el SDK base no tiene cola de prioridad, y un literal Map o Set es un LinkedHashMap o un LinkedHashSet, que recuerda el orden de inserción: útil para la salida, pero no es la misma garantía que un mapa ordenado.
¿Qué clases de Dart corresponden a qué estructuras de datos?
List es un array dinámico y tu pila; Map y Set son tablas hash, ordenadas por inserción por defecto; dart:collection añade Queue (una ListQueue, un búfer circular, salvo que elijas DoubleLinkedQueue), LinkedList para entradas que extienden LinkedListEntry, y SplayTreeMap y SplayTreeSet, árboles ordenados autoajustables. Para un heap, el package:collection del equipo de Dart ofrece PriorityQueue. Los tries y los grafos los escribes tú.
¿Tiene Dart una cola de prioridad?
No en el SDK base. dart:collection se queda en colas, listas enlazadas y árboles splay, y PriorityQueue vive en package:collection, un paquete que mantiene el equipo de Dart pero que añades tú. Eso hace que pedirte escribir un heap sea algo razonable en una entrevista de Dart, y el paso dos es donde lo escribes.
¿Qué es un árbol splay y cuándo debo usar SplayTreeMap?
Un árbol splay es un árbol binario de búsqueda autoajustable: cada acceso mueve a la raíz el nodo que tocó, así que las claves usadas recientemente se alcanzan rápido otra vez, y las operaciones cuestan O(log n) amortizado, no garantizado en cada llamada individual. Usa SplayTreeMap cuando necesites las claves en orden, la clave más pequeña o la más grande, o la clave más cercana a cada lado de un valor, con firstKeyAfter y lastKeyBefore. El árbol AVL que construyes en el paso dos sigue el enfoque contrario: se reequilibra en cada cambio para mantener su altura estrictamente acotada.
¿Qué cursos de esta ruta no se enseñan en Dart?
Tres: la programación dinámica y la serie de entrevistas en Python, que se enseñan en Python, y la manipulación de bits, que se enseña en C++. Aparecen después de los pasos, cada uno con un enlace que lo abre en su propio lenguaje. En Dart, la memoización se guarda en una List o en un Map, y toRadixString(2) imprime un int en binario, la forma más rápida de comprobar qué contiene de verdad una máscara.
¿Necesito saber Dart antes de empezar esta ruta?
Como mínimo, clases, genéricos, listas, mapas y null safety. Si son nuevos para ti, el curso de Dart de Coddy te lleva hasta ahí primero, gratis, y esta ruta continúa donde él termina.