Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การตรวจสอบว่าอาร์เรย์เพิ่มหรือลดอย่างเคร่งครัด (Strictly Monotonic) ใน JavaScript

ภาพรวม

บทความนี้สาธิตวิธีตรวจสอบว่าอาร์เรย์เป็น Strictly Increasing (เพิ่มอย่างเคร่งครัด) หรือ Strictly Decreasing (ลดอย่างเคร่งครัด) เท่านั้น

นิยาม

  • Strictly Increasing: a[i] < a[i+1] สำหรับทุก i
  • Strictly Decreasing: a[i] > a[i+1] สำหรับทุก i
  • ไม่รองรับ Non-decreasing (อนุญาตเท่ากันได้) หรือ Non-increasing

การนำไปใช้

const sameSlope = (a, b, c) => 
  (b - a < 0 && c - b < 0) || (b - a > 0 && c - b > 0);

const increasingOrDecreasing = (arr = []) => {
  if (arr.length <= 2) return true; // 0, 1, 2 元素 总是单调
  
  for (let i = 1; i < arr.length - 1; i++) {
    if (!sameSlope(arr[i-1], arr[i], arr[i+1])) {
      return false;
    }
  }
  return true;
};

console.log(increasingOrDecreasing([12, 45, 6, 4, 23, 23, 21, 1])); // false
console.log(increasingOrDecreasing([12, 45, 67, 89, 123, 144, 2656, 5657])); // true

ผลลัพธ์

false true

วิธีการที่ชัดเจนกว่า (แยก Increasing/Decreasing)

const isStrictlyMonotonic = (arr) => {
  if (arr.length <= 2) return true;
  
  let increasing = true;
  let decreasing = true;
  
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] <= arr[i-1]) increasing = false;
    if (arr[i] >= arr[i-1]) decreasing = false;
    if (!increasing && !decreasing) return false;
  }
  
  return increasing || decreasing;
};

Monotonic แบบไม่เคร่งครัด (Non-strict)

const isMonotonic = (arr) => {
  if (arr.length <= 2) return true;
  
  let increasing = true;
  let decreasing = true;
  
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < arr[i-1]) increasing = false;
    if (arr[i] > arr[i-1]) decreasing = false;
  }
  
  return increasing || decreasing;
};

การประยุกต์ใช้

  • Time Series Analysis: Trend Detection
  • Algorithm Validation: Binary Search Precondition
  • Data Quality: Detect Anomalies
  • Financial: Price Trend Analysis

ข้อควรระวัง

  • NaN Values: การเปรียบเทียบกับ NaN จะเป็น false เสมอ
  • Mixed Types: ต้องแปลงเป็น Number ก่อน
  • Floating Point Precision: อาจต้องใช้ Epsilon Comparison