ধরা যাক, আমাদেরকে সংখ্যার একটি অ্যারে দেওয়া হয়েছে যেখানে প্রথম 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 → accumulator, আগের পাসে ফেরত দেওয়া মান, এবং
- val → বর্তমান উপাদান মান,
- ind → বর্তমান উপাদানের সূচক
এখন, এই অ্যারেতে আমাদের কোড প্রয়োগ করা যাক −
[ 2, 3, 1, 2]
যেহেতু এই অ্যারের দৈর্ঘ্য 4, কলব্যাক ফাংশনের মোট 4টি পাস থাকা উচিত, কিন্তু যেহেতু আমরা reduce() ফাংশনে প্রাথমিক মান যুক্তি প্রদান করিনি, তাই পুনরাবৃত্তিগুলি সূচী 1 থেকে শুরু হবে এবং সঞ্চয়কারীকে প্রাথমিকভাবে মানের সাথে বরাদ্দ করা হবে zeroth সূচক, তাই মোট 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