微信小程序視頻網(wǎng)站開(kāi)發(fā)教程靜態(tài)網(wǎng)頁(yè)制作
目錄
- 一
- 1.思路
- 2.代碼
- 二
- 1.思路
- 2.代碼
- 三
- 1.思路
- 2.代碼
- 四
- 1.思路
- 2.代碼
鏈接:https://leetcode.cn/contest/weekly-contest-379/
一
1.思路
找最長(zhǎng)對(duì)角線,很顯然直接比較a^2 + b ^ 2就行
注意更新時(shí)考慮對(duì)角線長(zhǎng)度相等時(shí)候去面積最大
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.思路
因?yàn)檐?chē)可以豎直水平任意移動(dòng),所以不考慮擋路的情況,最多只需要兩步到達(dá)皇后處;考慮擋路,這個(gè)時(shí)候車(chē),象,皇后在同一行(列),這個(gè)時(shí)候飛走象即可,一步,再移動(dòng)車(chē)到皇后位置就好,總共兩步。
象的情況同理
所以只有兩種情況:一步或者兩步(廢話)
排除掉一步情況后其它都是兩步的
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.思路
最多元素個(gè)數(shù) ===> 考慮貪心
將元素種類(lèi)分成三類(lèi):
①nums1獨(dú)有的 ②nums2獨(dú)有的③共有的
很顯然有獨(dú)有就選獨(dú)有的是最優(yōu)解。
證明
假設(shè)在當(dāng)前步選共有為最優(yōu)解,此時(shí)剩余集合元素個(gè)數(shù)為k,而選獨(dú)有的會(huì)有k + 1 和 k 兩種可能
選獨(dú)有的 ≥ \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.思路
不會(huì),待寫(xiě)