সমস্যা বিবরণ
নাম্বার অ্যারে দেওয়া আছে। সব সম্ভাব্য অড (বিজোড়) লেন্থের কনটিগুয়াস সাবঅ্যারে বের করে তাদের টোটাল সমষ্টি রিটার্ন করতে হবে।
ইনপুট: [1, 2, 3, 4, 5]
অড লেন্থ সাবঅ্যারে: [1], [2], [3], [4], [5], [1,2,3], [2,3,4], [3,4,5], [1,2,3,4,5]
টোটাল সমষ্টি: ৫৭
সমাধান
const arr = [1, 2, 3, 4, 5];
const sumArray = (arr = []) => arr.reduce((a, b) => a + b);
const oddSum = (arr = []) => {
let len = 1;
let sum = 0;
const { length } = arr;
while (len <= length) {
for (let i = 0; i + len <= length; i++) {
sum += sumArray(arr.slice(i, i + len));
}
len += 2;
}
return sum;
};
console.log(oddSum(arr)); // 57
আউটপুট
57
অপ্টিমাইজড পদ্ধতি (O(n))
প্রতিটি এলিমেন্ট arr[i] কতবার অড-লেন্থ সাবঅ্যারেতে আসবে তা গণনা করা যায়:
total = ((i+1) * (n-i) + 1) / 2 (অড কাউন্ট)।