Vấn đề
Chúng tôi được yêu cầu viết một hàm JavaScript nhận một mảng số, arr, làm đối số đầu tiên và duy nhất.
Mảng arr có độ dài N chứa tất cả các số nguyên từ 0 đến N-1. Hàm của chúng ta được cho là tìm và trả về độ dài dài nhất của tập S, trong đó S [i] ={A [i], A [A [i]], A [A [A [i]]], ...} chủ đề sang phần bên dưới.
Giả sử phần tử đầu tiên trong S bắt đầu với việc lựa chọn phần tử A [i] của index =i, phần tử tiếp theo trong S phải là A [A [i]], và sau đó là A [A [A [i]]]… Bởi vậy tương tự, chúng tôi ngừng thêm ngay trước khi một phần tử trùng lặp xuất hiện trong S.
Ví dụ:nếu đầu vào của hàm là -
const arr = [5, 4, 0, 3, 1, 6, 2];
Sau đó, đầu ra phải là−
const output = 4;
Giải thích đầu ra
A [0] =5, A [1] =4, A [2] =0, A [3] =3, A [4] =1, A [5] =6, A [6] =2.
Một trong những chữ S [K] dài nhất:
S[0] = {A[0], A[5], A[6], A[2]} = {5, 6, 2, 0}
Ví dụ
Sau đây là mã -
const arr = [5, 4, 0, 3, 1, 6, 2]; const arrayNesting = (arr = []) => { const visited = {} const aux = (index) => { if (visited[index]) { return 0 } visited[index] = true return aux(arr[index], visited) + 1 } let max = 0 arr.forEach((n, index) => { if (!visited[index]) { max = Math.max(max, aux(index)) } ) return max } console.log(arrayNesting(arr));
Đầu ra
Sau đây là đầu ra của bảng điều khiển -
4