অ্যারেতে যেসব উপাদান একবারের বেশি আসছে, সেগুলোকে একবার করেই যোগ করা।
উদাহরণ
arr = [1, 5, 2, 1, 2, 3, 4, 5, 7, 8, 7, 1] ডিস্টিংক্ট: 1, 2, 3, 4, 5, 7, 8 যোগফল: 1+2+3+4+5+7+8 = 30
সমাধান
const distinctSum = (arr) => {
// Set ব্যবহার করে ইউনিক উপাদান
const unique = new Set(arr);
// যোগফল
return [...unique].reduce((sum, val) => sum + val, 0);
};
// lastIndexOf ট্রিক (মূল কোডের মতো)
const distinctSumLastIndex = (arr) => {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
// শুধু শেষ occurrence-এ যোগ করুন
if (i === arr.lastIndexOf(arr[i])) {
sum += arr[i];
}
}
return sum;
};
// Map ব্যবহার করে (ফ্রিকোয়েন্সি ও পাওয়া যায়)
const distinctSumMap = (arr) => {
const freq = new Map();
for (const val of arr) {
freq.set(val, (freq.get(val) || 0) + 1);
}
let sum = 0;
for (const [val, count] of freq) {
if (count >= 1) sum += val; // কমপক্ষে একবার আছে
}
return sum;
};
// টেস্ট
const arr = [1, 5, 2, 1, 2, 3, 4, 5, 7, 8, 7, 1];
console.log(distinctSum(arr)); // 30
console.log(distinctSumLastIndex(arr)); // 30
console.log(distinctSumMap(arr)); // 30
দ্রষ্টব্য
মূল কোডের আউটপুটে 30 দেখায়, কিন্তু কমেন্টে 20 লেখা আছে। সঠিক উত্তর 30।
পারফরম্যান্স
| পদ্ধতি | সময় | স্থান |
|---|---|---|
| Set + Reduce | O(n) | O(n) |
| lastIndexOf | O(n²) | O(1) |
| Map | O(n) | O(n) |
উৎপাদন
30