← Static tasks

1464. Maximum Product of Two Elements in an Array

leetcode easy

#array#csharp#easy#leetcode

Task

Дан массив целых чисел nums, выберите два разных индекса i и j этого массива. Верните максимальное значение (nums[i]-1)*(nums[j]-1).

Пример:

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

Output: 12

Explanation: If you choose the indices i=1 and j=2 (indexed from 0), you will get the maximum value,

that is, (nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12.

C# solution

matched/original
public class Solution {
    public int MaxProduct(int[] nums) {
        int biggest = 0;
        int secondBiggest = 0;
        foreach (int num in nums) {
            if (num > biggest) {
                secondBiggest = biggest;
                biggest = num;
            } else if (num > secondBiggest) {
                secondBiggest = num;
            }
        }
        return (biggest - 1) * (secondBiggest - 1);
    }
}

C++ solution

auto-draft, review before submit
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int MaxProduct(vector<int>& nums) {
        int biggest = 0;
        int secondBiggest = 0;
        foreach (int num in nums) {
            if (num > biggest) {
                secondBiggest = biggest;
                biggest = num;
            } else if (num > secondBiggest) {
                secondBiggest = num;
            }
        }
        return (biggest - 1) * (secondBiggest - 1);
    }
}

Java solution

matched/original
class Solution {
    public int maxProduct(int[] nums) {
        int biggest = 0;
        int secondBiggest = 0;
        for (int num : nums) {
            if (num > biggest) {
                secondBiggest = biggest;
                biggest = num;
            } else {
                secondBiggest = Math.max(secondBiggest, num);
            }
        }
        
        return (biggest - 1) * (secondBiggest - 1);
    }
}

JavaScript solution

matched/original
class Solution {
    maxProduct(nums) {
        let biggest = 0;
        let secondBiggest = 0;
        for (let num of nums) {
            if (num > biggest) {
                secondBiggest = biggest;
                biggest = num;
            } else if (num > secondBiggest) {
                secondBiggest = num;
            }
        }
        return (biggest - 1) * (secondBiggest - 1);
    }
}

Python solution

matched/original
class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        biggest = 0
        secondBiggest = 0
        for num in nums:
            if num > biggest:
                secondBiggest = biggest
                biggest = num
            elif num > secondBiggest:
                secondBiggest = num
        return (biggest - 1) * (secondBiggest - 1)

Explanation

Algorithm

Инициализируйте biggest = 0 и secondBiggest = 0.

Итерируйте по каждому элементу массива nums:

Если текущий элемент больше biggest, обновите secondBiggest = biggest и biggest = текущий элемент.

Иначе обновите secondBiggest, если текущий элемент больше secondBiggest.

Верните (biggest - 1) * (secondBiggest - 1).

😎