33: 链接:https://leetcode.com/contest/leetcode-weekly-contest-33/

A.Longest Harmonious Subsequence

思路:hash加查找

 class Solution {
public:
int findLHS(vector<int>& nums) {
if (nums.empty())
return ; int res = ;
int len = nums.size();
unordered_map<int, int> hash;
for (int i = ; i < len; i++)
hash[nums[i]]++;
for (auto it: hash)
{
if (hash.count(it.first + ))
res = max(res, it.second + hash[it.first + ]);
} return res;
}
};

B.Valid Square

思路:怎么判断是正方形呢(输入四个点无序)

只要四边边长均相等然后两个对角线长为边长的根号2倍即可

(注意距离大于0不然就是同一个点了,WA了一次)

 class Solution {
public:
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
vector<long long> dis;
long long d;
d = (p2[] - p1[]) * (p2[] - p1[]) + (p2[] - p1[]) * (p2[] - p1[]);
dis.push_back(d);
d = (p3[] - p1[]) * (p3[] - p1[]) + (p3[] - p1[]) * (p3[] - p1[]);
dis.push_back(d);
d = (p2[] - p4[]) * (p2[] - p4[]) + (p2[] - p4[]) * (p2[] - p4[]);
dis.push_back(d);
d = (p4[] - p3[]) * (p4[] - p3[]) + (p4[] - p3[]) * (p4[] - p3[]);
dis.push_back(d);
d = (p4[] - p1[]) * (p4[] - p1[]) + (p4[] - p1[]) * (p4[] - p1[]);
dis.push_back(d);
d = (p2[] - p3[]) * (p2[] - p3[]) + (p2[] - p3[]) * (p2[] - p3[]);
dis.push_back(d);
sort(dis.begin(), dis.end()); if (dis[] && dis[] == dis[] && dis[] == dis[] && dis[] == dis[] && dis[] == * dis[] && dis[] == * dis[])
return true;
else
return false;
}
};

C.Fraction Addition and Subtraction

思路:分数加减法,先单独算出每个分数的值,用c/d表示,然后结果用a/b表示,注意正负号,初始化a = 0, b = 1

(注意c,d数字可能大于9,所以要用while进行判断,WA了一次,b初始化为1,因为0不能做分母,0与任何数的最大公约数就是这个数,最小公倍数 = x*y/最大公约数)

 class Solution {
public:
long long gcd(long long x, long long y)
{
return y == ? x : gcd(y, x % y);
}
string fractionAddition(string expression) {
long long p, q;
long long flag = ;
long long a = , b = , c = , d = ;
int len = expression.size();
string res; for (int i = ; i < len; i++)
{
if (expression[i] == '-')
{
flag = -;
}
else if (expression[i] == '+')
{
flag = ;
}
else if ( '' <= expression[i] && expression[i] <= '')
{
while ('' <= expression[i] && expression[i] <= '')
c = c * + (expression[i++] - '');
c *= flag;
i--;
}
else if (expression[i] == '/')
{
i++;
while ('' <= expression[i] && expression[i] <= '')
d = d * + (expression[i++] - '');
i--; q = gcd(b, d);
p = b * d / q;
a = a * d / q;
c = c * b / q; a = a + c;
q = gcd(abs(a), p);
a = a / q;
b = p / q;
c = d = ;
}
else
;
} res += to_string(a) + "/" + to_string(b); return res;
}
};

(总结:思路比较清晰,就是写起来还得注意细节方面,WA了好几次,特例特判还是得多做题啊,加油!)

34: 链接:https://leetcode.com/contest/leetcode-weekly-contest-34/

1.Range Addition II

思路:直接算出最小的那个区间相乘就是结果

(注意判断为空的情况)

 class Solution {
public:
int maxCount(int m, int n, vector<vector<int>>& ops) {
if (ops.empty())
return m * n; int a, b;
a = b = INT_MAX;
for (int i = ; i < ops.size(); i++)
{
a = min(a, ops[i][]);
b = min(b, ops[i][]);
}
return a * b;
}
};

下边这个写法比较巧妙:

 class Solution {
public:
int maxCount(int m, int n, vector<vector<int>>& ops) {
for (auto op: ops)
{
m = min(m, op[]);
n = min(n, op[]);
}
return m * n;
}
};

:

2.Minimum Index Sum of Two Lists

思路:hash下第一个列表,然后再第二个列表中查找相同的字符串,并且计算下标的和,如果小,则清空数组压进去此时的字符串,如果相等则直接压入,如果大于不处理

 class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
unordered_map<string, int> hash;
vector<string> res;
int sum, num = INT_MAX; if (list1.empty() || list2.empty())
return res; for (int i = ; i < list1.size(); i++)
hash[list1[i]] = i; for (int j = ; j < list2.size(); j++)
{
if (hash.count(list2[j]))
{
sum = hash[list2[j]] + j;
if (num == INT_MAX)
{
num = sum;
res.push_back(list2[j]);
}
else if (sum == num)
res.push_back(list2[j]);
else if (sum < num)
{
num = sum;
res.clear();
res.push_back(list2[j]);
}
else
;
}
}
return res;
}
};

稍简洁版本:

 class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
unordered_map<string, int> hash;
vector<string> res;
int sum;
int num = INT_MAX; if (list1.empty() || list2.empty())
return res; for (int i = ; i < list1.size(); i++)
hash[list1[i]] = i; for (int j = ; j < list2.size(); j++)
{
if (hash.count(list2[j]))
{
sum = hash[list2[j]] + j;
if (sum < num)
{
num = sum;
res.clear();
res.push_back(list2[j]);
}
else if (sum == num)
res.push_back(list2[j]);
else
;
}
}
return res;
}
};

3.Array Nesting

思路:这个是hihocoder做过的一道题,直接每个进行判断,判断完了之后去找值对应的id

 class Solution {
public:
int arrayNesting(vector<int>& nums) {
int n = nums.size();
int count = ;
int res = ;
vector<int> vis; vis.resize(n, );
int i = ;
while (i < n)
{
if (vis[i])
{
res = max(res, count);
count = ;
i++;
}
else
{
vis[i] = ;
count++;
i = nums[i];
}
}
return res;
}
};

4.Non-negative Integers without Consecutive Ones

思路:不连续的1,用dp描述就是:dp[i][0] = dp[i - 1][0] + dp[i - 1][1]; dp[i][1] = dp[i - 1][0];然后再处理每一位的数字即可

 class Solution {
public:
int dp[][];
void init()
{
dp[][] = dp[][] = ;
for (int i = ; i <= ; i++)
{
dp[i][] = dp[i - ][] + dp[i - ][];
dp[i][] = dp[i - ][];
}
}
int dfs(int len, int num)
{
if (len <= )
return ; int val = << (len - );
if (num >= val)
return dp[len - ][] + dfs(len - , num - val);
else
return dfs(len - , num); }
int findIntegers(int num) {
init();
int len = ;
int n = num; while (n)
{
len++;
n >>= ;
} return dfs(len, num);
}
};

LeetCode Weekly Contest的更多相关文章

  1. LeetCode Weekly Contest 8

    LeetCode Weekly Contest 8 415. Add Strings User Accepted: 765 User Tried: 822 Total Accepted: 789 To ...

  2. leetcode weekly contest 43

    leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...

  3. LeetCode Weekly Contest 23

    LeetCode Weekly Contest 23 1. Reverse String II Given a string and an integer k, you need to reverse ...

  4. Leetcode Weekly Contest 86

    Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...

  5. 【LeetCode Weekly Contest 26 Q4】Split Array with Equal Sum

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/split-array-with-equal-sum/ ...

  6. 【LeetCode Weekly Contest 26 Q3】Friend Circles

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/friend-circles/ [题意] 告诉你任意两个 ...

  7. 【LeetCode Weekly Contest 26 Q2】Longest Uncommon Subsequence II

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...

  8. 【LeetCode Weekly Contest 26 Q1】Longest Uncommon Subsequence I

    [题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...

  9. LeetCode Weekly Contest 47

    闲着无聊参加了这个比赛,我刚加入战场的时候时间已经过了三分多钟,这个时候已经有20多个大佬做出了4分题,我一脸懵逼地打开第一道题 665. Non-decreasing Array My Submis ...

随机推荐

  1. CF615D Multipliers [数学]

    tags:[计数原理][乘法逆元][归纳の思想]题解(复杂度:O(mlogm)):棘手之处:n的约数多到爆炸.因此我们不妨从因子的角度来分析问题.对n分解质因数得:n = p1^a1 * p2^a2 ...

  2. 老李推荐:第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串

    老李推荐:第6章4节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-翻译命令字串   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自 ...

  3. Java并发编程:同步锁、读写锁

    之前我们说过线程安全问题可以用锁机制来解决,即线程必要要先获得锁,之后才能进行其他操作.其实在 Java 的 API 中有这样一些锁类可以提供给我们使用,与其他对象作为锁相比,它们具有更强大的功能. ...

  4. 3.Java集合总结系列:Set接口及其实现

    一.Set接口 Set 接口与 List 接口相比没有那么多操作方法,比如: 1.List 接口能直接设置或获取某个元素的值,而Set接口不能. 2.List 接口能直接在指定位置删除.增加元素,而S ...

  5. 3.Redis常用命令:String

    字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的Value ...

  6. 从面试小白走向master

    腾讯2017春招(实习生招聘)在线笔试知识点总结: 1.栈与队列(用队列实现栈) 2.排序算法(最坏情况下时间复杂度) 3.TCP协议(3次

  7. Apache Beam 剖析

    1.概述 在大数据的浪潮之下,技术的更新迭代十分频繁.受技术开源的影响,大数据开发者提供了十分丰富的工具.但也因为如此,增加了开发者选择合适工具的难度.在大数据处理一些问题的时候,往往使用的技术是多样 ...

  8. 配置WampServer以及搭建WordPress的一些问题,持续总结。

    这里用的版本是Wampserver2.4-x64. Wamp的安装就不赘述了,一路点通过就可以了. #注意:(最好别改,省的麻烦) 80端口是Apache 的默认端口,在httpd.conf文件中配置 ...

  9. 记一次 Newtonsoft.Json 巧妙的用法(C#)

    数据添加的功能 有一个表格提交数据如下: 是否选择和文本值.分开保存到数据库太麻烦.取得时候也麻烦 想到了存成json数据.一个字段就可以了. html代码: <table class=&quo ...

  10. JS事件处理程序

    JS事件处理程序:HTML事件处理程序.DOM0级事件处理程序.DOM2级事件处理程序.IE事件处理程序.跨浏览器的事件处理程序. HTML事件处理程序 <script type="t ...