链接:https://leetcode.cn/contest/weekly-contest-379/
找最长对角线,很显然直接比较a^2 + b ^ 2就行
注意更新时考虑对角线长度相等时候去面积最大
class Solution {
public:
int areaOfMaxDiagonal(vector<vector<int>>& d) {
int res = 0, mx = 0;
for(int i = 0; i < d.size(); i++){
int t = d[i][1] * d[i][1] + d[i][0] * d[i][0];
if(mx < t){
mx = t;
res = d[i][0] * d[i][1];
}else if(mx == t){
res = max(res, d[i][0] * d[i][1]);
}
}
return res;
}
};
因为车可以竖直水平任意移动,所以不考虑挡路的情况,最多只需要两步到达皇后处;考虑挡路,这个时候车,象,皇后在同一行(列),这个时候飞走象即可,一步,再移动车到皇后位置就好,总共两步。
象的情况同理
所以只有两种情况:一步或者两步(废话)
排除掉一步情况后其它都是两步的
class Solution {
public:
//是否在中间挡路
bool check(int a, int b, int c){
return c < min(a, b) || c > max(a, b);
}
int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) {
if((a == e && (a != c || check(b, f, d))) ||
(b == f && (b != d || check(a, e, c))) ||
(c + d == e + f && (c + d != a + b || check(c, e, a))) ||
(c - d == e - f && (c - d != a - b || check(c, e, a)))){
return 1;
}
return 2;
}
};
最多元素个数 ===> 考虑贪心
将元素种类分成三类:
①nums1独有的 ②nums2独有的③共有的
很显然有独有就选独有的是最优解。
证明
假设在当前步选共有为最优解,此时剩余集合元素个数为k,而选独有的会有k + 1 和 k 两种可能
选独有的 ≥ \geq ≥选共有
class Solution {
public:
int maximumSetSize(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
set<int> s1, s2, s;
for(int c : nums1){
s1.insert(c);
}
for(int c : nums2){
s2.insert(c);
if(s1.count(c)){
s.insert(c);
}
}
int c1 = s1.size(), c2 = s2.size(), c = s.size();
c1 -= c, c2 -= c;
int r1 = min(c1, n / 2), r2 = min(c2, n / 2);
int res = min(c, n - r1 - r2) + r1 + r2;
return res;
}
};
不会,待写