मान लीजिए, हमें संख्याओं की एक सरणी दी गई है जिसमें पहले n प्राकृतिक संख्याएँ हैं, लेकिन एक तत्व सरणी में दो बार दिखाई देता है, इसलिए तत्वों की कुल संख्या n+1 है। हमारा काम एक फ़ंक्शन लिखना है जो सरणी में लेता है और वह संख्या देता है जो रैखिक समय में दो बार दिखाई देती है।
विधि 1:Array.prototype.reduce()
. का उपयोग करनायह थोड़ा पेचीदा तरीका है लेकिन लिखित कोड के मामले में सबसे अधिक संकुचित है। सबसे पहले, आइए इसके लिए कोड देखें -
const arr = [1,4,8,5,6,7,9,2,3,7]; const duplicate = a => a.reduce((acc, val, ind) => val+acc- (ind+1))+a.length-1; console.log(duplicate(arr));
यहां हमने कम फ़ंक्शन का उपयोग किया है, इसका कॉलबैक, जो सरणी के प्रत्येक तत्व के लिए एक बार संचालित होता है, हमारे मामले में तीन तर्क ले रहा है,
- acc → संचायक, पिछले पास में लौटाया गया मान, और
- वैल → वर्तमान तत्व मान,
- इंड → वर्तमान तत्व का सूचकांक
अब, इस एरे पर अपना कोड लागू करते हैं -
[ 2, 3, 1, 2]
चूंकि इस सरणी की लंबाई 4 है, कॉलबैक फ़ंक्शन के कुल 4 पास होने चाहिए, लेकिन जैसा कि हमने कम () फ़ंक्शन के लिए प्रारंभिक मान तर्क प्रदान नहीं किया है, पुनरावृत्तियों को इंडेक्स 1 से शुरू किया जाएगा और संचायक को शुरू में मूल्य के साथ सौंपा जाएगा ज़ीरोथ इंडेक्स, इसलिए कुल 3 पास होंगे।
पहला पास
acc = 2, val = 3, ind = 1 return value = 2+3 - (1+1) = 3
दूसरा पास
acc = 3, val = 1, ind = 2 return value = 3+1 - (2+1) = 1
तीसरा पास
acc = 1, val = 2, ind = 3 return value = 1+2 - (3+1) = -1
सरणी का अंत
इसलिए -1 सरणी से वापस आ जाता है, और फिर
-1 + (4-1) = -1 + 3 = 2
डुप्लिकेट () फ़ंक्शन से वापस आ जाता है, जो वास्तव में सही परिणाम है।
विधि 2:Array.prototype.forEach()
इस पद्धति में, हम सरणी पर पुनरावृति करते हैं, उसका योग प्राप्त करते हैं, और उसमें से पहली (n-1) प्राकृतिक संख्याओं का योग घटाते हैं, जहाँ n सरणी की लंबाई है, जो बचता है वह वह संख्या है जो दो बार दोहराई जाती है, इसलिए हम वापस लौटते हैं यह।
उदाहरण
const arr = [1,4,8,5,6,7,9,2,3,7]; const duplicate = a => { let sum = 0; const { length: n } = a; a.forEach(num => sum += num); return sum - ((n*(n-1))/2); } console.log(duplicate(arr));
आउटपुट
कंसोल में आउटपुट होगा -
7