9. Array Problems - Basic
অ্যারে অপারেশনগুলো শেখার পর এবার বাস্তব কিছু সমস্যা সমাধান করা যাক। সব সমস্যাই Step-by-Step Logic এবং Complexity Analysis সহ দেওয়া হলো।
1. বৃহত্তম এলিমেন্ট (Largest Element)
একটি অ্যারের মধ্য থেকে বৃহত্তম সংখ্যাটি খুঁজে বের করা।
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- অ্যারের প্রথম এলিমেন্টকে
maxহিসেবে ধরুন। - দ্বিতীয় এলিমেন্ট থেকে শেষ পর্যন্ত লুপ চালান।
- প্রতিটি এলিমেন্টের সাথে
maxতুলনা করুন। যদি বর্তমান এলিমেন্টটিmax-এর চেয়ে বড় হয়, তবেmax-কে আপডেট করুন। - লুপ শেষে
max-ই হবে বৃহত্তম সংখ্যা।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n) - একবার পুরো অ্যারে ঘুরতে হয়।
- Space Complexity: O(1) - অতিরিক্ত মেমরি লাগে না।
Java Implementation
java
public int findLargest(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
}
return max;
}Python Implementation
python
def find_largest(arr):
return max(arr)2. সেকেন্ড লার্জেস্ট এলিমেন্ট (Second Largest)
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- দুটি ভেরিয়েবল নিন:
largest = -1এবংsecondLargest = -1। - অ্যারের প্রতিটি এলিমেন্ট চেক করুন:
- যদি এলিমেন্টটি
largest-এর চেয়ে বড় হয়, তবেsecondLargest-কে আগেরlargestদিয়ে আপডেট করুন এবং নতুন এলিমেন্টকেlargestবানান। - যদি এলিমেন্টটি
largest-এর ছোট কিন্তুsecondLargest-এর বড় হয়, তবে শুধুsecondLargestআপডেট করুন।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n) - মাত্র এক বার লুপ (Single Pass) চালিয়েই সমাধান করা যায়।
- Space Complexity: O(1)
Implementation
java
// Java Second Largest
public int secondLargest(int[] arr) {
int largest = Integer.MIN_VALUE, second = Integer.MIN_VALUE;
for (int num : arr) {
if (num > largest) {
second = largest;
largest = num;
} else if (num > second && num != largest) {
second = num;
}
}
return second == Integer.MIN_VALUE ? -1 : second;
}python
# Python Second Largest
def second_largest(arr):
largest = second = float('-inf')
for num in arr:
if num > largest:
second = largest
largest = num
elif num > second and num != largest:
second = num
return second if second != float('-inf') else -13. সর্টেড কিনা চেক করা (Check if Sorted)
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- দ্বিতীয় এলিমেন্ট থেকে চেক করা শুরু করুন।
- বর্তমান এলিমেন্টটি কী তার আগের এলিমেন্টের চেয়ে ছোট?
- যদি ছোট হয়, তবে অ্যারেটি সর্টেড নয় (Return
false)।
- লুপ শেষ হলে বুঝবেন অ্যারেটি সর্টেড (Return
true)।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n)
- Space Complexity: O(1)
4. ডুপ্লিকেট রিমুভ করা (Remove Duplicates)
এটি একটি সর্টেড (Sorted) অ্যারের জন্য প্রযোজ্য।
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- দুটি পয়েন্টার নিন:
i = 0(ইউনিক এলিমেন্টের জন্য) এবংj = 1(ট্রাভার্স করার জন্য)। - যদি
arr[i]এবংarr[j]ভিন্ন হয়, তবেi-কে এক ঘর বাড়ান এবং সেখানেarr[j]বসান। - লুপ শেষে
i + 1হবে নতুন সাইজ।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n)
- Space Complexity: O(1)
5. শূন্যগুলোকে শেষে নিয়ে আসা (Move Zeros to End)
অ্যারের সব ০ এলিমেন্টকে শেষে নিয়ে যাওয়া এবং অন্য এলিমেন্টগুলোর ক্রম ঠিক রাখা।
🛠 কর্মপদ্ধতি (Step-by-Step Logic)
- একটি পয়েন্টার
jনিন যা সর্বশেষ নন-জিরো এলিমেন্টের পজিশন ট্র্যাক করবে। - অ্যারেটি ট্রাভার্স করুন। যদি কোনো নন-জিরো এলিমেন্ট পাওয়া যায়, তবে সেটিকে
jইনডেক্সের সাথে অদলবদল (Swap) করুন এবংjএক ঘর বাড়ান।
📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)
- Time Complexity: O(n)
- Space Complexity: O(1)
TIP
কোডিং প্রবলেম সমাধানের সময় লজিক মনে পড়ার চেয়ে লজিকটি ধাপে ধাপে (Step-by-Step) চিন্তা করা বেশি কার্যকর।