Welcome to Subscribe On Youtube

3745. Maximize Expression of Three Elements

Description

You are given an integer array nums.

Choose three elements a, b, and c from nums at distinct indices such that the value of the expression a + b - c is maximized.

Return an integer denoting the maximum possible value of this expression.

 

Example 1:

Input: nums = [1,4,2,5]

Output: 8

Explanation:

We can choose a = 4, b = 5, and c = 1. The expression value is 4 + 5 - 1 = 8, which is the maximum possible.

Example 2:

Input: nums = [-2,0,5,-2,4]

Output: 11

Explanation:

We can choose a = 5, b = 4, and c = -2. The expression value is 5 + 4 - (-2) = 11, which is the maximum possible.

 

Constraints:

  • 3 <= nums.length <= 100
  • -100 <= nums[i] <= 100

Solutions

Solution 1: Find Maximum, Second Maximum, and Minimum Values

According to the problem description, we need to choose three elements $a$, $b$, and $c$ at distinct indices such that the value of the expression $a + b - c$ is maximized.

We only need to traverse the array to find the largest two elements $a$ and $b$ and the smallest element $c$. Then we can calculate the value of the expression.

The time complexity is $O(n)$, where $n$ is the length of the array. The space complexity is $O(1)$.

  • class Solution {
        public int maximizeExpressionOfThree(int[] nums) {
            final int inf = 1 << 30;
            int a = -inf, b = -inf, c = inf;
            for (int x : nums) {
                if (x < c) {
                    c = x;
                }
                if (x >= a) {
                    b = a;
                    a = x;
                } else if (x > b) {
                    b = x;
                }
            }
            return a + b - c;
        }
    }
    
    
  • class Solution {
    public:
        int maximizeExpressionOfThree(vector<int>& nums) {
            const int inf = 1 << 30;
            int a = -inf, b = -inf, c = inf;
            for (int x : nums) {
                if (x < c) {
                    c = x;
                }
                if (x >= a) {
                    b = a;
                    a = x;
                } else if (x > b) {
                    b = x;
                }
            }
            return a + b - c;
        }
    };
    
    
  • class Solution:
        def maximizeExpressionOfThree(self, nums: List[int]) -> int:
            a = b = -inf
            c = inf
            for x in nums:
                if x < c:
                    c = x
                if x >= a:
                    a, b = x, a
                elif x > b:
                    b = x
            return a + b - c
    
    
  • func maximizeExpressionOfThree(nums []int) int {
        const inf = 1 << 30
        a, b, c := -inf, -inf, inf
        for _, x := range nums {
            if x < c {
                c = x
            }
            if x >= a {
                b = a
                a = x
            } else if x > b {
                b = x
            }
        }
        return a + b - c
    }
    
    
  • function maximizeExpressionOfThree(nums: number[]): number {
        const inf = 1 << 30;
        let [a, b, c] = [-inf, -inf, inf];
    
        for (const x of nums) {
            if (x < c) {
                c = x;
            }
            if (x >= a) {
                b = a;
                a = x;
            } else if (x > b) {
                b = x;
            }
        }
        return a + b - c;
    }
    
    

All Problems

All Solutions