目录
- 一
- 1.思路
- 2.代码
- 二
- 1.思路
- 2.代码
- 三
- 1.思路
- 2.代码
- 四
- 1.思路
- 2.代码
链接:https://leetcode.cn/contest/weekly-contest-379/
一
1.思路
找最长对角线,很显然直接比较a^2 + b ^ 2就行
注意更新时考虑对角线长度相等时候去面积最大
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;}
};
二
1.思路
因为车可以竖直水平任意移动,所以不考虑挡路的情况,最多只需要两步到达皇后处;考虑挡路,这个时候车,象,皇后在同一行(列),这个时候飞走象即可,一步,再移动车到皇后位置就好,总共两步。
象的情况同理
所以只有两种情况:一步或者两步(废话)
排除掉一步情况后其它都是两步的
2.代码
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;}
};
三
1.思路
最多元素个数 ===> 考虑贪心
将元素种类分成三类:
①nums1独有的 ②nums2独有的③共有的
很显然有独有就选独有的是最优解。
证明
假设在当前步选共有为最优解,此时剩余集合元素个数为k,而选独有的会有k + 1 和 k 两种可能
选独有的 ≥ \geq ≥选共有
2.代码
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;}
};
四
1.思路
不会,待写