Check If Array Pairs Are Divisible by k

 Given an array of integers arr of even length n and an integer k.


We want to divide the array into exactly n / 2 pairs such that the sum of each pair is divisible by k.


Return true If you can find a way to do that or false otherwise.


 


Example 1:


Input: arr = [1,2,3,4,5,10,6,7,8,9], k = 5

Output: true

Explanation: Pairs are (1,9),(2,8),(3,7),(4,6) and (5,10).

Example 2:


Input: arr = [1,2,3,4,5,6], k = 7

Output: true

Explanation: Pairs are (1,6),(2,5) and(3,4).

Example 3:


Input: arr = [1,2,3,4,5,6], k = 10

Output: false

Explanation: You can try all possible pairs to see that there is no way to divide arr into 3 pairs each with sum divisible by 10.



Dry Run Example

Input: arr = [2, 4, 1, 3], k = 5

Check pairs:

2 + 3 = 5 (valid)

4 + 1 = 5 (valid)

All elements are used successfully, so return true.

Beginner Notes

- boolean[] used = new boolean[n] creates a flag array to track used elements.

- !used[j] checks if arr[j] is unused.

- We use a flag foundPair to see if any valid pair was found.

- If any element cannot be paired, we return false


Summary Points

- used[] array: Marks used elements.

- Nested loops: Check for valid divisible pair.

- Modulo check: (arr[i] + arr[j]) % k == 0

- foundPair: Used to break early if pair is found


class Solution {
    public boolean canArrange(int[] arr, int k) {
       

        int n=arr.length;
               //  Step 1: Create a flag array to track used elements
        boolean[] used = new boolean[n];

        // Step 2: Try to make pairs
        for (int i = 0; i < n; i++) {
            if (used[i]) continue; // Skip if already used

            boolean foundPair = false; // Flag to know if a pair is found for arr[i]

            for (int j = i + 1; j < n; j++) {
                if (!used[j]) { // Only try unused elements
                    int sum = arr[i] + arr[j];

                    if (sum % k == 0) {
                        //  Valid pair found!
                        used[i] = true;
                        used[j] = true;
                        foundPair = true;
                        break; // Stop searching for arr[i]
                    }
                }
            }

            if (!foundPair) {
                //  No valid pair for arr[i]
                return false;
            }
        }

        //  All pairs formed successfully
        return true;
    }
}

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence