Skip to content

9. Array Problems - Basic

অ্যারে অপারেশনগুলো শেখার পর এবার বাস্তব কিছু সমস্যা সমাধান করা যাক। সব সমস্যাই Step-by-Step Logic এবং Complexity Analysis সহ দেওয়া হলো।


1. বৃহত্তম এলিমেন্ট (Largest Element)

একটি অ্যারের মধ্য থেকে বৃহত্তম সংখ্যাটি খুঁজে বের করা।

🛠 কর্মপদ্ধতি (Step-by-Step Logic)

  1. অ্যারের প্রথম এলিমেন্টকে max হিসেবে ধরুন।
  2. দ্বিতীয় এলিমেন্ট থেকে শেষ পর্যন্ত লুপ চালান।
  3. প্রতিটি এলিমেন্টের সাথে max তুলনা করুন। যদি বর্তমান এলিমেন্টটি max-এর চেয়ে বড় হয়, তবে max-কে আপডেট করুন।
  4. লুপ শেষে 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)

  1. দুটি ভেরিয়েবল নিন: largest = -1 এবং secondLargest = -1
  2. অ্যারের প্রতিটি এলিমেন্ট চেক করুন:
  • যদি এলিমেন্টটি 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 -1

3. সর্টেড কিনা চেক করা (Check if Sorted)

🛠 কর্মপদ্ধতি (Step-by-Step Logic)

  1. দ্বিতীয় এলিমেন্ট থেকে চেক করা শুরু করুন।
  2. বর্তমান এলিমেন্টটি কী তার আগের এলিমেন্টের চেয়ে ছোট?
  • যদি ছোট হয়, তবে অ্যারেটি সর্টেড নয় (Return false)।
  1. লুপ শেষ হলে বুঝবেন অ্যারেটি সর্টেড (Return true)।

📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)

  • Time Complexity: O(n)
  • Space Complexity: O(1)

4. ডুপ্লিকেট রিমুভ করা (Remove Duplicates)

এটি একটি সর্টেড (Sorted) অ্যারের জন্য প্রযোজ্য।

🛠 কর্মপদ্ধতি (Step-by-Step Logic)

  1. দুটি পয়েন্টার নিন: i = 0 (ইউনিক এলিমেন্টের জন্য) এবং j = 1 (ট্রাভার্স করার জন্য)।
  2. যদি arr[i] এবং arr[j] ভিন্ন হয়, তবে i-কে এক ঘর বাড়ান এবং সেখানে arr[j] বসান।
  3. লুপ শেষে i + 1 হবে নতুন সাইজ।

📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)

  • Time Complexity: O(n)
  • Space Complexity: O(1)

5. শূন্যগুলোকে শেষে নিয়ে আসা (Move Zeros to End)

অ্যারের সব ০ এলিমেন্টকে শেষে নিয়ে যাওয়া এবং অন্য এলিমেন্টগুলোর ক্রম ঠিক রাখা।

🛠 কর্মপদ্ধতি (Step-by-Step Logic)

  1. একটি পয়েন্টার j নিন যা সর্বশেষ নন-জিরো এলিমেন্টের পজিশন ট্র্যাক করবে।
  2. অ্যারেটি ট্রাভার্স করুন। যদি কোনো নন-জিরো এলিমেন্ট পাওয়া যায়, তবে সেটিকে j ইনডেক্সের সাথে অদলবদল (Swap) করুন এবং j এক ঘর বাড়ান।

📊 কমপ্লেক্সিটি অ্যানালাইসিস (Complexity Analysis)

  • Time Complexity: O(n)
  • Space Complexity: O(1)

TIP

কোডিং প্রবলেম সমাধানের সময় লজিক মনে পড়ার চেয়ে লজিকটি ধাপে ধাপে (Step-by-Step) চিন্তা করা বেশি কার্যকর।

Released under the MIT License.