Skip to main content

Discover what life after college is really like in India, from work and money to friendships, freedom, responsibility, and adjusting to your first job.

Life After College: What Actually Changes? Graduation can feel surprisingly strange. After years of classes, assignments, exams, college events, attendance, friends sitting nearby, and a routine you mostly understand, one day you simply stop being a student. And then comes the question nobody really answers: what happens after college? You may expect some dramatic transformation. In reality, life after college usually changes in much smaller ways. Your mornings become more structured. Your salary arrives, but so do rent and bills. Your friends become busier. You get more freedom, but you also become responsible for more decisions. Most importantly, graduating does not suddenly make you feel like you have everything figured out. For many Indian students, the transition from college to work life is a mixture of excitement, confusion, independence, pressure, and a little nostalgia. Some changes happen immediately. Others take months or even years to notice. Here is what life ...

Chocolate Distribution Problem

Chocolate Distribution Problem

Given an array arr[] of positive integers, where each value represents the number of chocolates in a packet. Each packet can have a variable number of chocolates. There are m students, the task is to distribute chocolate packets among m students such that -
      i. Each student gets exactly one packet.
     ii. The difference between maximum number of chocolates given to a student and minimum number of chocolates given to a student is minimum and return that minimum possible difference.

Examples:

Input: arr = [3, 4, 1, 9, 56, 7, 9, 12], m = 5
Output: 6
Explanation: The minimum difference between maximum chocolates and minimum chocolates is 9 - 3 = 6 by choosing following m packets :[3, 4, 9, 7, 9].
Input: arr = [7, 3, 2, 4, 9, 12, 56], m = 3
Output: 2
Explanation: The minimum difference between maximum chocolates and minimum chocolates is 4 - 2 = 2 by choosing following m packets :[3, 2, 4].
Input: arr = [3, 4, 1, 9, 56], m = 5
Output: 55
Explanation: With 5 packets for 5 students, each student will receive one packet, so the difference is 56 - 1 = 55.

Constraints:
1 ≤ m <= arr.size ≤ 105
1 ≤ arr[i] ≤ 109


Approach

To solve the problem efficiently, we can use the sorting technique followed by a sliding window approach:

  1. Sort the array: Sorting groups similar values together, allowing us to easily find the minimum and maximum values within any consecutive group of m elements.

  2. Sliding Window of size m: Check the difference between the maximum and minimum values in each window of size m to find the minimum difference.


Java Code:



import java.util.Arrays;

public class ChocolateDistribution {

    public static int findMinDiff(int[] arr, int m) {
        if (arr.length < m) return -1; // Not enough packets

        Arrays.sort(arr); // Step 1: Sort the array

        int minDiff = Integer.MAX_VALUE;

        // Step 2: Find the min difference in any window of size m
        for (int i = 0; i + m - 1 < arr.length; i++) {
            int diff = arr[i + m - 1] - arr[i];
            minDiff = Math.min(minDiff, diff);
        }

        return minDiff;
    }

    public static void main(String[] args) {
        int[] arr1 = {3, 4, 1, 9, 56, 7, 9, 12};
        int m1 = 5;
        System.out.println(findMinDiff(arr1, m1)); // Output: 6

        int[] arr2 = {7, 3, 2, 4, 9, 12, 56};
        int m2 = 3;
        System.out.println(findMinDiff(arr2, m2)); // Output: 2
    }
}



Time Complexity:

  • Sorting: O(n log n)

  • Sliding Window: O(n)

Total: O(n log n)


Other Approaches:

  1. Brute Force Approach
    Idea: Check all combinations of m packets and find the minimum difference.
    Time Complexity: O(n^m) (very inefficient)
    Not recommended for large inputs.

  2. Sort + Sliding Window Approach (Optimal)
    Time Complexity: O(n log n)
    Space Complexity: O(1)
    Best for large inputs.


    Arrays.sort(arr);
    int minDiff = Integer.MAX_VALUE;
    for (int i = 0; i + m - 1 < arr.length; i++) {
        int diff = arr[i + m - 1] - arr[i];
        minDiff = Math.min(minDiff, diff);
    }


  3. Min Heap Approach (Suboptimal)
    Time Complexity: O(n log n) for sorting + heap operations
    Space Complexity: O(m)
    Not commonly used unless the array is too large to sort in memory.

  4. Greedy Approach Using Sort
    This approach is essentially the same as the optimal one but viewed through a greedy lens: choose the group of m chocolates that minimizes the max - min.

  5. Two-Pointer Technique (After Sorting)
    Time Complexity: O(n log n)
    Similar to the sliding window, but explicitly uses two pointers start and end to iterate over windows of size m.


    int i = 0, j = m - 1;
    int minDiff = Integer.MAX_VALUE;
    while (j < arr.length) {
        minDiff = Math.min(minDiff, arr[j] - arr[i]);
        i++;
        j++;
    }

  6. Bucket Sort Based (When arr[i] range is small)
    Time Complexity: O(n + range)
    Space Complexity: O(range)
    Useful if arr[i] values are small (e.g., up to 10^4).


Summary Table:

Approach Time Complexity Space Complexity When to Use
Brute Force O(n^m) High Never (slow)
Sort + Sliding Window O(n log n) O(1) Best for large inputs
Min Heap O(n log n) O(m) Rare case
Two Pointer After Sorting O(n log n) O(1) Good
Bucket Sort O(n + range) O(range) If arr[i] is small

Here is the corrected version of the code you provided. The issue is that you are using arr.length, but since arr is an ArrayList, you should use arr.size() instead. Also, you need to return the minDiff at the end of the method.

✅ Corrected Code:


import java.util.ArrayList;

class Solution {
    public int findMinDiff(ArrayList<Integer> arr, int m) {
        // If the number of packets is less than the number of students, return -1
        if (arr.size() < m) {
            return -1;
        }

        // Sort the array to bring similar values together
        arr.sort(null);

        int minDiff = Integer.MAX_VALUE;

        // Use a sliding window to find the minimum difference
        for (int i = 0; i + m - 1 < arr.size(); i++) {
            int diff = arr.get(i + m - 1) - arr.get(i);
            minDiff = Math.min(minDiff, diff);
        }

        return minDiff;
    }
}
 
 

🏃‍♂️ Explanation:

  • First, the list is sorted to bring similar values together.

  • Then, a sliding window approach is used to find the minimum difference between the largest and smallest chocolates in any window of size m.

Comments

Popular posts from this blog

217. Contains Duplicate

217. Contains Duplicate Difficulty: Easy Problem Statement Given an integer array nums , return true if any value appears at least twice in the array, and return false if every element is distinct . Example 1: Input: nums = [1, 2, 3, 1] Output: true Explanation: The element 1 appears more than once (at indices 0 and 3). Example 2: Input: nums = [1, 2, 3, 4] Output: false Explanation: All elements are unique. Example 3: Input: nums = [1, 1, 1, 3, 3, 4, 3, 2, 4, 2] Output: true Explanation: Several elements appear multiple times: 1 , 3 , 4 , and 2 . Constraints: 1 <= nums.length <= 10⁵ -10⁹ <= nums[i] <= 10⁹ Solution:   import java.util.Arrays; class Solution {     public boolean containsDuplicate ( int [] nums ) {         Arrays . sort (nums); // Sort the array         for ( int i = 1 ; i < nums . length ; i++) {             if (nums[i]...

Learn how to improve communication skills as a student or fresher with practical tips for speaking clearly, active listening, interviews, presentations, and workplace communication.

How to Improve Communication Skills as a Student or Fresher You can have good technical skills, a strong resume and impressive projects, but if you struggle to explain your ideas clearly, communication can become a challenge in college, interviews and your first job. The good news is that communication is a skill you can improve . You don't need perfect English, a foreign accent, a huge vocabulary or a naturally outgoing personality. What you need is regular practice: listening carefully, organizing your thoughts, speaking clearly, asking better questions and learning from feedback. For students and freshers, communication is especially important because you may use it in completely different situations within the same week—from a college presentation to a placement interview and then a message to a senior at work. In this guide, I'll share practical ways to improve communication skills as a student or fresher , including speaking exercises, voice clarity, act...