ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของ Integers, arr เป็นอาร์กิวเมนต์แรกและ Integer เดียว กำหนดเป้าหมายเป็นอาร์กิวเมนต์ที่สองและอาร์กิวเมนต์แรก ฟังก์ชันของเราควรตรวจสอบว่ามีอาร์เรย์ย่อยต่อเนื่องที่มีขนาดอย่างน้อย 2 ตัวที่รวมผลคูณของ k หรือไม่ นั่นคือผลรวมสูงสุด n*k โดยที่ n สามารถเป็นจำนวนเต็มใดๆ ได้
เราจะคืนค่า จริง หากมี มิฉะนั้น เท็จ
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const arr = [23, 2, 6, 4, 7]; const target = 6;
จากนั้นผลลัพธ์ควรเป็น −
const output = true;
คำอธิบายผลลัพธ์:
เนื่องจาก [23, 2, 6, 4, 7] เป็นอาร์เรย์ย่อยแบบต่อเนื่องที่มีขนาด 5 และรวมกันได้มากถึง 42
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [23, 2, 6, 4, 7];
const target = 6;
const checkSubarraySum = (arr = [], target = 1) => {
let sum = 0
const hash = {}
hash[0] = -1;
for (let i = 0; i<arr.length; i++) {
sum += arr[i]
if (target!=0) sum %= target
if ( hash[sum] !== undefined ) {
if(i-hash[sum]>1) return true
} else {
hash[sum] = i
}
};
return false;
};
console.log(checkSubarraySum(arr, target)); ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
true