All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g2701_2800.s2708_maximum_strength_of_a_group.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g2701_2800.s2708_maximum_strength_of_a_group;

// #Medium #Array #Sorting #Greedy #Backtracking
// #2023_09_15_Time_2_ms_(85.08%)_Space_43.1_MB_(57.14%)

import java.util.ArrayList;
import java.util.List;

/**
 * 2708 - Maximum Strength of a Group\.
 *
 * Medium
 *
 * You are given a **0-indexed** integer array `nums` representing the score of students in an exam. The teacher would like to form one **non-empty** group of students with maximal **strength** , where the strength of a group of students of indices i0, i1, i2, ... , ik is defined as nums[i0] * nums[i1] * nums[i2] * ... * nums[ik].
 *
 * Return _the maximum strength of a group the teacher can create_.
 *
 * **Example 1:**
 *
 * **Input:** nums = [3,-1,-5,2,5,-9]
 *
 * **Output:** 1350
 *
 * **Explanation:** One way to form a group of maximal strength is to group the students at indices [0,2,3,4,5]. Their strength is 3 \* (-5) \* 2 \* 5 \* (-9) = 1350, which we can show is optimal.
 *
 * **Example 2:**
 *
 * **Input:** nums = [-4,-5,-4]
 *
 * **Output:** 20
 *
 * **Explanation:** Group the students at indices [0, 1] . Then, we’ll have a resulting strength of 20. We cannot achieve greater strength.
 *
 * **Constraints:**
 *
 * *   `1 <= nums.length <= 13`
 * *   `-9 <= nums[i] <= 9`
**/
public class Solution {
    public long maxStrength(int[] nums) {
        List filtered = new ArrayList<>();
        long product = 1L;
        boolean hasZero = false;
        for (int num : nums) {
            if (num == 0) {
                hasZero = true;
                continue;
            }
            filtered.add(num);
            product *= num;
        }
        if (filtered.isEmpty()) {
            return 0;
        }
        if (filtered.size() == 1 && filtered.get(0) <= 0) {
            return hasZero ? 0 : filtered.get(0);
        }
        long result = product;
        for (int num : nums) {
            if (num == 0) {
                continue;
            }
            result = Math.max(result, product / num);
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy