LeetCode-in-Java

2966. Divide Array Into Arrays With Max Difference

Medium

You are given an integer array nums of size n and a positive integer k.

Divide the array into one or more arrays of size 3 satisfying the following conditions:

Return a 2D array containing all the arrays. If it is impossible to satisfy the conditions, return an empty array. And if there are multiple answers, return any of them.

Example 1:

Input: nums = [1,3,4,8,7,9,3,5,1], k = 2

Output: [[1,1,3],[3,4,5],[7,8,9]]

Explanation: We can divide the array into the following arrays: [1,1,3], [3,4,5] and [7,8,9]. The difference between any two elements in each array is less than or equal to 2. Note that the order of elements is not important.

Example 2:

Input: nums = [1,3,3,2,7,3], k = 3

Output: []

Explanation: It is not possible to divide the array satisfying all the conditions.

Constraints:

Solution

import java.util.Arrays;

public class Solution {
    public int[][] divideArray(int[] nums, int k) {
        Arrays.sort(nums);
        int n = nums.length;
        int triplets = n / 3;
        int[][] result = new int[triplets][];
        for (int i = 0, j = 0; i < n; i += 3, j++) {
            int first = nums[i];
            int third = nums[i + 2];
            if (third - first > k) {
                return new int[0][];
            }
            result[j] = new int[] {first, nums[i + 1], third};
        }
        return result;
    }
}