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

जावास्क्रिप्ट में प्रत्येक विंडो के लिए माध्यिका ढूँढना

<घंटा/>

औसत

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

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

समस्या

हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता है जो पहले तर्क के रूप में इंटीजर, एआर की एक सरणी लेता है और दूसरे तर्क के रूप में एक संख्या संख्या (संख्या <=सरणी गिरफ्तारी की लंबाई) लेता है।

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

उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -

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+ तर्क अपेक्षित हैं। यह हमें कार्य करने के लिए एक सरणी के रूप में कई मापदंडों को पारित करने की अनुमति देता है। जावास्क्रिप्ट में सरणियों के लिए स्प्रेड ऑपरेटर को लागू करने के लिए कोड निम्नलिखित है - उ

  1. जावास्क्रिप्ट में स्टेटमेंट के लिए... के बारे में बताएं?

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

  1. जावास्क्रिप्ट में प्रत्येक नोड के लिए अगला बड़ा नोड ढूँढना

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