Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

Subarray sum ที่มีอย่างน้อยสององค์ประกอบใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน 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