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; }