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