题目一:
1464、给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你计算并返回该式的最大值。
示例 1:
输入:nums = [3,4,5,2]
输出:12
解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12
#include<algorithm>
using namespace std;
class Solution {
public:
int maxProduct(vector<int>& nums) {
sort(nums.begin(),nums.end());
int len=nums.size();
return (nums[len-1]-1)*(nums[len-2]-1);
}
};
结果:
执行用时 :16 ms, 在所有 C++ 提交中击败了63.18% 的用户
内存消耗 :10.3 MB, 在所有 C++ 提交中击败了100.00%的用户
题目二:
1465、矩形蛋糕的高度为 h 且宽度为 w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中 horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离,类似地, verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离。
请你按数组 horizontalCuts 和 verticalCuts 中提供的水平和竖直位置切割后,请你找出 面积最大 的那份蛋糕,并返回其 面积 。由于答案可能是一个很大的数字,因此需要将结果对 10^9 + 7 取余后返回。
示例:
输入:h = 5, w = 4, horizontalCuts = [1,2,4], verticalCuts = [1,3]
输出:4
解释:上图所示的矩阵蛋糕中,红色线表示水平和竖直方向上的切口。切割蛋糕后,绿色的那份蛋糕面积最大。
#include<algorithm>
#include<math.h>
class Solution {
public:
int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {
sort(horizontalCuts.begin(),horizontalCuts.end());
sort(verticalCuts.begin(),verticalCuts.end());
horizontalCuts.push_back(h);
verticalCuts.push_back(w);
long long mh=horizontalCuts[0],mw=verticalCuts[0];
int t;
for(int i=1;i<horizontalCuts.size();i++){
t=horizontalCuts[i]-horizontalCuts[i-1];
if(t>mh) mh=t;
}
for(int i=1;i<verticalCuts.size();i++){
t=verticalCuts[i]-verticalCuts[i-1];
if(t>mw) mw=t;
}
long long mod = pow(10,9)+7;
long long ans= mw*mh;
return ans%mod;
}
};
结果:
执行用时 :268 ms, 在所有 C++ 提交中击败了11.99% 的用户
内存消耗 :32.4 MB, 在所有 C++ 提交中击败了100.00%的用户
题目三:
1466、n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。
路线用 connections 表示,其中 connections[i] = [a, b] 表示从城市 a 到 b 的一条有向路线。
今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。
请你帮助重新规划路线方向,使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。
题目数据 保证 每个城市在重新规划路线方向后都能到达城市 0 。
示例一: