Degree ของอาร์เรย์ของค่าคงที่ (literals) ถูกนิยามว่าเป็นความถี่สูงสุดขององค์ประกอบใดองค์ประกอบหนึ่งในอาร์เรย์นั้นๆ
const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3];
Degree ของอาร์เรย์นี้คือ 4 เนื่องจากตัวเลข 3 ปรากฏซ้ำ 4 ครั้งในอาร์เรย์นี้
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของค่าคงที่เข้ามา ภารกิจของฟังก์ชันคือการหาความยาวของ subarray ที่ต่อเนื่องกัน (contiguous subarray) ที่เล็กที่ซึ่งมี degree เท่ากับ degree ของอาร์เรย์ทั้งหมด
ตัวอย่าง
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));
ผลลัพธ์
ผลลัพธ์ที่แสดงในคอนโซลจะเป็นดังนี้:
8