Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

JavaScript में हर विंडो के लिए माध्यिका ढूंढना


माध्यिका

गणित में, माध्यिका एक क्रमबद्ध (सॉर्टेड) पूर्णांक सूची में मध्य मान होता है।

यदि सूची का आकार सम है, और कोई मध्य मान नहीं है। माध्यिका दो मध्य मानों का औसत (माध्य) होता है।

समस्या

हमें एक JavaScript फ़ंक्शन लिखना है जो पहली आर्ग्युमेंट के रूप में पूर्णांकों की एक सरणी arr और दूसरी आर्ग्युमेंट के रूप में संख्या num (num <= arr.length) लेता है।

अब सरणी arr में आकार num की प्रत्येक विंडो के लिए, हमारा फ़ंक्शन माध्यिका की गणना करेगा और उस माध्यिका मान को एक नई सरणी में डालेगा और अंत में पुनरावृत्ति के अंत में उस माध्यिका सरणी को वापस करेगा।

उदाहरण

यदि फ़ंक्शन का इनपुट है:

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

तो आउटपुट होना चाहिए:

const output = [5, 5, 5, 3, 3, 8, 8, 4, 4, 6];

आउटपुट व्याख्या:

प्रारंभिक इंडेक्सवर्तमान विंडोवर्तमान सॉर्टेड विंडोमाध्यिका
0[5, 3, 7][3, 5, 7]5
1[3, 7, 5][3, 5, 7]5
2[7, 5, 3][3, 5, 7]5
3[5, 3, 1][1, 3, 5]3
4[3, 1, 8][1, 3, 8]3
5[1, 8, 9][1, 8, 9]8
6[8, 9, 2][2, 8, 9]8
7[9, 2, 4][2, 4, 9]4
8[2, 4, 6][2, 4, 6]4
9[4, 6, 8][4, 6, 8]6

कोड

const arr = [5, 3, 7, 5, 3, 1, 8, 9, 2, 4, 6, 8]; const num = 3; const binarySearch = (arr, target, l, r) => {    while (l < r) {       const mid = Math.floor((l + r) / 2);       if (arr[mid] < target) l = mid + 1;       else if (arr[mid] > target) r = mid;       else return mid;    };    if (l === r) return arr[l] >= target ? l : l + 1; } const medianSlidingWindow = (arr = [], num = 1) => {    let l = 0, r = num - 1, res = [];    const window = arr.slice(l, num);    window.sort((a, b) => a - b);    while (r < arr.length) {       const median = num % 2 === 0 ? (window[Math.floor(num / 2) - 1] + window[Math.floor(num / 2)]) / 2 : window[Math.floor(num / 2)];       res.push(median);       let char = arr[l++];       let index = binarySearch(window, char, 0, window.length - 1);       window.splice(index, 1);       char = arr[++r];       index = binarySearch(window, char, 0, window.length - 1);       window.splice(index, 0, char);    }    return res; }; console.log(medianSlidingWindow(arr, num));

कोड व्याख्या:

इस समाधान के पीछे विचार बाइनरी सर्च का उपयोग करके स्लाइडिंग विंडो को दाएं ले जाते समय सही नंबर डालना और बायां नंबर हटाना है।

आउटपुट

कंसोल में आउटपुट होगा:

[5, 5, 5, 3, 3, 8, 8, 4, 4, 6 ]
  1. जावास्क्रिप्ट में ऐरे के लिए स्प्रेड ऑपरेटर जावास्क्रिप्ट में ऐरे के लिए स्प्रेड ऑपरेटर

    स्प्रेड (...) सिंटैक्स हमें एक इटरेबल (जैसे ऐरे) को उन स्थानों पर विस्तारित करने की अनुमति देता है जहां 0 या अधिक आर्गुमेंट्स की अपेक्षा होती है। यह हमें एक ऐरे को पैरामीटर्स के रूप में एक फ़ंक्शन में पास करने की सुविधा देता है। उदाहरण <!DOCTYPE html> <html lang=en> <head> <me

  1. जावास्क्रिप्ट में for...in स्टेटमेंट समझाया गया जावास्क्रिप्ट में for...in स्टेटमेंट समझाया गया

    for...in लूप ऑब्जेक्ट की सभी प्रॉपर्टीज के माध्यम से लूप करता है। जावास्क्रिप्ट में for..in स्टेटमेंट को लागू करने का कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0

  1. JavaScript में प्रत्येक नोड के लिए अगला बड़ा नोड खोजना JavaScript में प्रत्येक नोड के लिए अगला बड़ा नोड खोजना

    समस्या हमें एक JavaScript फ़ंक्शन लिखना है जो लिंक्ड लिस्ट के हेड को पहले और एकमात्र आर्गुमेंट के रूप में लेता है। node_i.val, और j सबसे छोटा संभव विकल्प है। यदि ऐसा j मौजूद नहीं है, तो अगला बड़ा मान 0 है। हमारे फ़ंक्शन को एक सरणी तैयार करके वापस करनी चाहिए जिसमें संबंधित तत्व सूची में तत्व के लिए