Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm và trả về độ dài dài nhất của tập hợp trong JavaScript

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