Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tìm độ của mảng con trong mảng bằng JavaScript

Độ (degree) của một mảng các giá trị được định nghĩa là tần suất xuất hiện tối đa của bất kỳ phần tử nào trong mảng đó.

const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3];

Độ của mảng này là 4, vì số 3 xuất hiện 4 lần.

Chúng ta cần viết một hàm JavaScript nhận vào một mảng các giá trị. Nhiệm vụ của hàm là tìm độ dài của mảng con liên tục nhỏ nhất có độ bằng với độ của toàn bộ mảng.

Ví dụ

const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3]; 
const findShortestSubArray = (arr = []) => { 
  let range = new Map(), maxDegree = 0, minLength = Infinity; 
  for(let i = 0; i < arr.length; i++){
    if(range.has(arr[i])) { 
      let start = range.get(arr[i])[0]; 
      let degree = range.get(arr[i])[2]; 
      degree++; 
      range.set(arr[i], [start, i, degree]); 
      if(degree > maxDegree) maxDegree = degree; 
    } else { 
      let degree = 1; 
      range.set(arr[i],[i, i, degree]); 
      if(degree > maxDegree) maxDegree = degree; 
    } 
  } 
  for (let key of range.keys()){ 
    let val = range.get(key); 
    if(val[2] === maxDegree){ 
      let diff = (val[1] - val[0]) + 1; 
      if(diff < minLength) minLength = diff; 
    } 
  } 
  return minLength; 
}; 
console.log(findShortestSubArray(arr));

Kết quả

Kết quả in ra console sẽ là:

8