复习期末了,这周周赛水一水
1. 数组中两元素的最大乘积
代码
class Solution {
public:
int maxProduct(vector<int>& nums) {
int N = nums.size();
sort(nums.begin(),nums.end());
return (nums[N-1]-1)*(nums[N-2]-1);
}
};
2. 切割后面积最大的蛋糕
代码
const int MOD = 10e8+7;
class Solution {
public:
int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {
int N = horizontalCuts.size();
int M = verticalCuts.size();
sort(horizontalCuts.begin(),horizontalCuts.end());
sort(verticalCuts.begin(),verticalCuts.end());
int maxi = horizontalCuts[0];
int maxj = verticalCuts[0];
for(int i=1;i<N;i++)
maxi = max(maxi,horizontalCuts[i] - horizontalCuts[i-1]);
maxi = max(maxi,h - horizontalCuts[N-1]);
for(int j=1;j<M;j++)
maxj = max(maxj, verticalCuts[j] - verticalCuts[j-1]);
maxj = max(maxj, w - verticalCuts[M-1]);
//return maxi;
return ((long long)maxi*(long long)maxj)%MOD;
}
};
3. 重新规划路线
class Solution {
public:
int minReorder(int n, vector<vector<int>>& connections) {
vector<vector<int> > con_ind;
con_ind.resize(n);
for (int i = 0; i < connections.size(); i++) {
con_ind[connections[i][0]].push_back(i);
con_ind[connections[i][1]].push_back(i);
}
queue<int> que;
vector<bool> vis;
vis.resize(connections.size());
int ans = 0;
que.push(0);
while(que.size())
{
int q = que.front();
que.pop();
for (auto ind : con_ind[q]) {
if (vis[ind])
continue;
vis[ind] = true;
int s = connections[ind][0];
int e = connections[ind][1];
if(s==q)
{
ans+=1;
s = e;
}
que.push(s);
}
}
return ans;
}
};