微信小程序視頻網(wǎng)站開發(fā)教程靜態(tài)網(wǎng)頁制作
目錄
- 一
- 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.思路
最多元素個數(shù) ===> 考慮貪心
將元素種類分成三類:
①nums1獨有的 ②nums2獨有的③共有的
很顯然有獨有就選獨有的是最優(yōu)解。
證明
假設在當前步選共有為最優(yōu)解,此時剩余集合元素個數(shù)為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.思路
不會,待寫