একটি অ্যারে দেওয়া আছে যাতে পজিটিভ ও নেগেটিভ উভয় সংখ্যা থাকতে পারে। ফাংশনটি অ্যারেতে থেকে সব নেগেটিভ মান সরিয়ে শুধু পজিটিভ সংখ্যা রাখবে। শর্ত: কোনো টেম্পোরারি অ্যারে তৈরি করা যাবে না, শুধু pop() মেথড ব্যবহার করে উপাদান সরাতে হবে।
উদাহরণ কোড
// শেষ থেকে নেগেটিভ মানগুলো সরিয়ে ফেলুন
while (x.length && x[x.length - 1] < 0) {
x.pop();
}
for (var i = x.length - 1; i >= 0; i--) {
if (x[i] < 0) {
// এই উপাদানকে শেষ উপাদান দিয়ে প্রতিস্থাপন করুন (যেটি নিশ্চিতভাবেই পজিটিভ)
x[i] = x[x.length - 1];
x.pop();
}
}
আউটপুট
[ 1, 8, 9 ]
ব্যাখ্যা
- প্রথম
whileলুপটি অ্যারের শেষ থেকে নেগেটিভ মানগুলোpop()দিয়ে সরিয়ে ফেলে। - দ্বিতীয় লুপটি পিছন থেকে সামনে চলে। যদি কোনো নেগেটিভ মান পাওয়া যায়, তবে সেটিকে বর্তমান শেষ উপাদান (যেটি পজিটিভ) দিয়ে প্রতিস্থাপন করে
pop()করে। - এই পদ্ধতিতে অ্যারের সাইজ ছোট হয়ে যায় এবং অর্ডার বদলতে পারে, কিন্তু শুধু পজিটিভ মানগুলো থাকে।
- সময় জটিলতা: O(n), স্পেস জটিলতা: O(1)।
দ্রষ্টব্য
এই কোড স্নিপেটটি অনুমান করে যে x ভেরিয়েবলটি ইতিমধ্যে ডিফাইন করা আছে। পুরো ফাংশন হিসেবে লিখলে:
function removeNegatives(arr) {
while (arr.length && arr[arr.length - 1] < 0) {
arr.pop();
}
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i] < 0) {
arr[i] = arr[arr.length - 1];
arr.pop();
}
}
return arr;
}