"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > टाइपस्क्रिप्ट कोडिंग क्रॉनिकल्स: ट्रिपलेट अनुवर्ती को बढ़ाना

टाइपस्क्रिप्ट कोडिंग क्रॉनिकल्स: ट्रिपलेट अनुवर्ती को बढ़ाना

2024-07-30 को प्रकाशित
ब्राउज़ करें:491

Typescript Coding Chronicles: Increasing Triplet Subsequence

समस्या का विवरण:

एक पूर्णांक सरणी संख्याओं को देखते हुए, यदि सूचकांक (i, j, k) का त्रिगुण मौजूद है जैसे कि i

उदाहरण 1:

  • इनपुट: अंक = [1,2,3,4,5]
  • आउटपुट: सत्य
  • स्पष्टीकरण: कोई भी त्रिक जहां i

उदाहरण 2:

  • इनपुट: अंक = [5,4,3,2,1]
  • आउटपुट: गलत
  • स्पष्टीकरण: कोई त्रिक मौजूद नहीं है।

उदाहरण 3:

  • इनपुट: अंक = [2,1,5,0,4,6]
  • आउटपुट: सत्य
  • स्पष्टीकरण: त्रिक (3, 4, 5) वैध है क्योंकि अंक[3] == 0

प्रतिबंध:

  • 1
  • -2^31

पालन ​​करें:

क्या आप कोई ऐसा समाधान लागू कर सकते हैं जो O(n) समय जटिलता और O(1) अंतरिक्ष जटिलता में चलता हो?

प्रारंभिक विचार प्रक्रिया:

इस समस्या को कुशलता से हल करने के लिए, हमें अब तक सामने आए सबसे छोटे और दूसरे सबसे छोटे मूल्यों पर नज़र रखने की ज़रूरत है। यदि हमें तीसरा मान मिलता है जो दूसरे सबसे छोटे से अधिक है, तो हमें एक बढ़ती हुई त्रिक मिलती है।

मूल समाधान (क्रूर बल):

ब्रूट फोर्स समाधान में यह देखने के लिए सभी संभावित त्रिगुणों की जांच करना शामिल है कि क्या कोई मौजूद है जो i

कोड:

function increasingTripletBruteForce(nums: number[]): boolean {
    const n = nums.length;
    for (let i = 0; i 



समय जटिलता विश्लेषण:

  • समय जटिलता: O(n^3), जहां n सरणी की लंबाई है। ऐसा इसलिए है क्योंकि हम सभी संभावित त्रिक की जाँच कर रहे हैं।
  • अंतरिक्ष जटिलता: O(1), क्योंकि हम किसी अतिरिक्त स्थान का उपयोग नहीं कर रहे हैं।

सीमाएँ:

क्रूर बल समाधान कुशल नहीं है और बड़े इनपुट आकारों के लिए उपयुक्त नहीं है।

अनुकूलित समाधान:

अनुकूलित समाधान में दो चर, पहले और दूसरे को बनाए रखते हुए सरणी के माध्यम से पुनरावृत्ति शामिल है, जो अब तक सामने आए सबसे छोटे और दूसरे सबसे छोटे मूल्यों का प्रतिनिधित्व करते हैं। यदि हमें सेकंड से अधिक मान मिलता है, तो हम सत्य लौटाते हैं।

कोड:

function increasingTriplet(nums: number[]): boolean {
    let first = Infinity;
    let second = Infinity;

    for (let num of nums) {
        if (num 



समय जटिलता विश्लेषण:

  • समय जटिलता: O(n), जहां n सरणी की लंबाई है। हम सरणी के माध्यम से एक बार पुनरावृति करते हैं।
  • अंतरिक्ष जटिलता: O(1), क्योंकि हम केवल एक स्थिर मात्रा में अतिरिक्त स्थान का उपयोग कर रहे हैं।

बुनियादी समाधान की तुलना में सुधार:

  • यह समाधान रैखिक समय में चलता है और निरंतर स्थान का उपयोग करता है, जो इसे दी गई बाधाओं के लिए इष्टतम बनाता है।

किनारे के मामले और परीक्षण:

किनारे के मामले:

  1. सरणी घटते क्रम में है।
  2. सरणी में बढ़ते क्रम में बिल्कुल तीन तत्व शामिल हैं।
  3. सरणी में बड़ी संख्या में तत्व हैं जिनमें कोई बढ़ती त्रिक नहीं है।
  4. सरणी में डुप्लिकेट हैं।

परीक्षण के मामलों:

console.log(increasingTripletBruteForce([1,2,3,4,5])); // true
console.log(increasingTripletBruteForce([5,4,3,2,1])); // false
console.log(increasingTripletBruteForce([2,1,5,0,4,6])); // true
console.log(increasingTripletBruteForce([1,1,1,1,1])); // false
console.log(increasingTripletBruteForce([1,2])); // false
console.log(increasingTripletBruteForce([1,2,3])); // true
console.log(increasingTripletBruteForce([1,5,0,4,1,3])); // true

console.log(increasingTriplet([1,2,3,4,5])); // true
console.log(increasingTriplet([5,4,3,2,1])); // false
console.log(increasingTriplet([2,1,5,0,4,6])); // true
console.log(increasingTriplet([1,1,1,1,1])); // false
console.log(increasingTriplet([1,2])); // false
console.log(increasingTriplet([1,2,3])); // true
console.log(increasingTriplet([1,5,0,4,1,3])); // true

सामान्य समस्या-समाधान रणनीतियाँ:

  1. समस्या को समझें: आवश्यकताओं और बाधाओं को समझने के लिए समस्या विवरण को ध्यान से पढ़ें।
  2. मुख्य परिचालनों को पहचानें: आवश्यक प्रमुख परिचालनों को निर्धारित करें, जैसे सबसे छोटे और दूसरे सबसे छोटे मानों को ट्रैक करना।
  3. दक्षता के लिए अनुकूलन: समय और स्थान की जटिलता को कम करने के लिए कुशल एल्गोरिदम और डेटा संरचनाओं का उपयोग करें।
  4. पूरी तरह से परीक्षण करें: शुद्धता सुनिश्चित करने के लिए किनारे के मामलों सहित विभिन्न मामलों के साथ समाधान का परीक्षण करें।

समान समस्याओं की पहचान करना:

  1. सबअरे समस्याएं:

    • समस्याएं जहां आपको विशिष्ट गुणों के साथ उपसरणी ढूंढने की आवश्यकता होती है।
    • उदाहरण: अधिकतम योग उपसरणी ढूँढना (कडाने का एल्गोरिदम)।
  2. दो-सूचक तकनीक:

    • ऐसी समस्याएं जहां दो पॉइंटर्स का उपयोग करने से समाधान को अनुकूलित करने में मदद मिल सकती है।
    • उदाहरण: क्रमबद्ध सरणी से डुप्लिकेट हटाना।
  3. इन-प्लेस एल्गोरिदम:

    • ऐसी समस्याएं जहां संचालन को सीमित अतिरिक्त स्थान के साथ निष्पादित करने की आवश्यकता होती है।
    • उदाहरण: किसी सरणी को k चरणों द्वारा दाईं ओर घुमाना।

निष्कर्ष:

  • बढ़ते त्रिक अनुक्रम को खोजने की समस्या को एक क्रूर बल दृष्टिकोण और रैखिक समय और निरंतर स्थान जटिलता के साथ एक अनुकूलित समाधान दोनों का उपयोग करके कुशलतापूर्वक हल किया जा सकता है।
  • समस्या को समझना और उसे प्रबंधनीय भागों में तोड़ना महत्वपूर्ण है।
  • कुशल एल्गोरिदम का उपयोग यह सुनिश्चित करता है कि समाधान बड़े इनपुट के लिए इष्टतम है।
  • विभिन्न किनारे के मामलों के साथ परीक्षण मजबूती सुनिश्चित करता है।
  • समस्याओं में पैटर्न को पहचानने से अन्य चुनौतियों के लिए समान समाधान लागू करने में मदद मिल सकती है।

ऐसी समस्याओं और रणनीतियों का अभ्यास करके, आप अपने समस्या-समाधान कौशल में सुधार कर सकते हैं और विभिन्न कोडिंग चुनौतियों के लिए बेहतर ढंग से तैयार हो सकते हैं।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/__zamora__/typescript-coding-chronicles-increasing-triplet-subsequence-207l?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3