正文索引 [隐藏]

传送门→

T1 数组中两元素的最大乘积

签到题,两个for。

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n = nums.size();
        int maxn = -1;
        for(int i = 0; i < n; i++)
            for(int j = 0; j < n; j++)
                if(i != j)
                    maxn = max((nums[i]-1) * (nums[j]-1), maxn);
        return maxn;
    }
};

T2 切割后面积最大的蛋糕

题目大意是:有一个区域,被切分成了若干小区域,然后找出这些小区域中最大的那块面积是多大。

因为长与宽的划分节点是相互独立的,所以只需要分别找到长与宽的划分点里既相邻又差值最大的两对点就可以了,它们的积再模上1e9+7就是答案。

class Solution {
public:
    int maxArea(int h, int w, vector<int>& hor, vector<int>& ver) {
        const int MOD = 1e9+7;

        int hmax, vmax;
        int n = hor.size();
        int m = ver.size();

        sort(hor.begin(), hor.end());
        sort(ver.begin(), ver.end());

        hmax = max(hor[0], h - hor.back());
        vmax = max(ver[0], w - ver.back());
        for(int i = 1; i < n; i++)
            hmax = max(hmax, hor[i] - hor[i-1]);
        for(int i = 1; i < m; i++)
            vmax = max(vmax, ver[i] - ver[i-1]);

        return 1LL * hmax * vmax % MOD;
    }
};

T3 重新规划路线