382. lista de nodos al azar
Dada una única lista enlazada, seleccionar al azar una lista enlazada de nodos, los nodos y devuelve el valor correspondiente. Para asegurarse de que se selecciona la misma probabilidad de cada nodo.
Avanzado:
Si la lista es muy grande y la longitud de la desconocida, la forma de resolver este problema? Se puede utilizar un espacio complejidad nivel constante de lograr?
Ejemplo:
// inicializar una sola cadena [l, 2,3].
NodoLista nuevo nuevo NodoLista cabeza = (1.);
Head.next = nuevo nuevo NodoLista (2);
(. 3) NodoLista head.next.next nuevos nuevos =;
Solución Solución Solución = new nuevo (cabeza);
// getRandom () devuelve el método un azar 1,2,3 debe garantizar la igualdad de probabilidad de cada elemento que se devuelve.
solution.getRandom ();
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
private ListNode head;
public Solution(ListNode head) {
this.head = head;
}
public int getRandom() {
int res = head.val;
ListNode no = head.next;
int i = 2;
Random random = new Random();
while(no!=null){
if(random.nextInt(i) == 0){
res = no.val;
}
i++;
no = no.next;
}
return res;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(head);
* int param_1 = obj.getRandom();
*/