LeetCode Weekly Contest 25
1. 507. Perfect Number
显然小于2的都不满足(尤其是负数的情况),进一步,显然质数都不满足,所以小于4的数,直接return false。
然后依次暴力枚举判断到sqrt(n),注意n = t * t的时候,t只需要加一次。好像不写这个也不会出错,因为没有这样的数满足条件。我没验证,需要的验证一下。
class Solution {
public:
bool checkPerfectNumber(int num) {
if(num <= ) return ;
int res = ;
int d = floor(sqrt(num));
for (int i = ; i <= d; i++) {
if(i == num) break;
if(num % i == ) {
res += i;
if(i != num / i) res += num / i;
if(res > num) return ;
}
}
return res == num;
}
};
2. 537. Complex Number Multiplication
按照题意完成就可以。
class Solution {
public:
string complexNumberMultiply(string a, string b) {
int x = , y = , m = , n = ;
sscanf(a.c_str(), "%d+%di", &x, &y);
sscanf(b.c_str(), "%d+%di", &m, &n);
stringstream ss;
int t1 = x * m - y * n, t2 = x * n + y * m;
ss << t1 << "+" << t2 << "i";
return ss.str();
}
};
3. 545. Boundary of Binary Tree
左扫一遍,叶子扫一遍,右边扫一遍,注意边界条件。编码比较多,注意特判。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> res;
vector<int> ri;
bool f;
void workleft(TreeNode* root) {
if(!root) return;
res.push_back(root->val);
if(root->left)
workleft(root->left);
else
workleft(root->right);
}
void work(TreeNode* root) {
if(!root) return;
if(!root->left && !root->right) {
if(!f) f = ;
else res.push_back(root->val);
}
work(root->left);
work(root->right);
}
void workright(TreeNode* root) {
if(!root) return;
ri.push_back(root->val);
if(root->right)
workright(root->right);
else
workright(root->left);
}
vector<int> boundaryOfBinaryTree(TreeNode* root) {
res.clear();
if(!root) return res;
res.push_back(root->val);
workleft(root->left);
if(root->left)
f = ;
else
f = ;
work(root->left);
work(root->right);
ri.clear();
workright(root->right);
reverse(ri.begin(), ri.end());
//cout << res.size() << " " << ri.size() << endl;
for (int i = ; i < ri.size(); i++) {
res.push_back(ri[i]);
//cout << ri[i] << endl;
}
return res;
}
};
4. 546. Remove Boxes
不会做,没有想法。看完题目,感觉跟burst ballon挺像的,因为枚举先删除的话,左右2边的会合在一起,使得后续的处理边的麻烦,应该是需要最后考虑,怎么进行合并,使得2边的问题变得独立。
从discuss里面看的答案。好像先把数组处理成字符,个数的形式,不是很好处理,需要寻找一种好的枚举方法,对问题进行化简。
刚开始,观察,如果一个字符只出现一次,那么这个字符对结果的贡献就是1,也就是说可以直接删除它,删除后左右2边的部分进行合并,这里有个问题,这个单独字符删除的时间,是否会影响最后的结果,不太确定。
我的想法是,处理成数字,个数的形式,然后依次枚举删除的字符。每次调用的时候,先进行单个字符的处理,然后合并相邻的,再递归调用,结果是tle。完全是暴力的解法。
下面的解法是,每次处理末尾的字符,使得问题规模缩小,然后考虑末尾的字符,可能跟前面的字符进行合并,然后进行搜索,有些段可能多次计算,采用记忆化搜索。这个想法的关键是,找到一种搜索的办法,缩减问题规模,同时不遗漏可能的解。
int dp[][][];
int work(vector<int>& b, int l, int r, int k) {
if(l > r) return ;
int& res = dp[l][r][k];
if(res != ) return res;
while(l < r && b[r - ] == b[r]) {
k++;
r--;
}
res = work(b, l, r - , ) + (k + ) * (k + );
for (int i = l; i < r; i++) {
if(b[i] == b[r]) {
res = max(res, work(b, l, i, k + ) + work(b, i + , r - , ));
}
}
return res;
}
int removeBoxes(vector<int>& boxes) {
memset(dp, , sizeof dp);
int n = boxes.size();
return work(boxes, , n - , );
}
LeetCode Weekly Contest 25的更多相关文章
- LeetCode Weekly Contest 8
LeetCode Weekly Contest 8 415. Add Strings User Accepted: 765 User Tried: 822 Total Accepted: 789 To ...
- leetcode weekly contest 43
leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...
- LeetCode Weekly Contest 23
LeetCode Weekly Contest 23 1. Reverse String II Given a string and an integer k, you need to reverse ...
- Leetcode Weekly Contest 86
Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...
- LeetCode Weekly Contest
链接:https://leetcode.com/contest/leetcode-weekly-contest-33/ A.Longest Harmonious Subsequence 思路:hash ...
- 【LeetCode Weekly Contest 26 Q4】Split Array with Equal Sum
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/split-array-with-equal-sum/ ...
- 【LeetCode Weekly Contest 26 Q3】Friend Circles
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/friend-circles/ [题意] 告诉你任意两个 ...
- 【LeetCode Weekly Contest 26 Q2】Longest Uncommon Subsequence II
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...
- 【LeetCode Weekly Contest 26 Q1】Longest Uncommon Subsequence I
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...
随机推荐
- MVC POST请求后执行javascript代码
[HttpPost] public ActionResult PostTest() { //你的业务代码 //...... //要执行的js string js = "window.loca ...
- Git 从github克隆文件至本地
学习阶段,同一个项目,如何保障家与公司的代码同步的问题,可以使用git克隆来解决 在家将项目提交到了GitHub上,现在来到公司,需要将GitHub上的项目克隆到本地,那么对于公司的电脑来说,同样需要 ...
- react新版本生命周期
给componentWillMount componentWillReceiveProps componentWillUpdate生命周期加上UNSAFE_前缀,表明其不安全性,并将在未来版本将其移除 ...
- BZOJ 1585: Earthquake Damage 2 地震伤害 网络流 + 最小割
Description Farmer John的农场里有P个牧场,有C条无向道路连接着他们,第i条道路连接着两个牧场Ai和Bi,注意可能有很多条道路连接着相同的Ai和Bi,并且Ai有可能和Bi相等.F ...
- spring boot jpa 无法使用findOne
(findOne(id))说我无法转换成相应的类型,换一种即可,如下: user = userRepository.findOne(id);//spring 2.x用不了 @GetMapping(&q ...
- 微信小程序获取登录手机号
小程序获取登录用户手机号. 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发. 首先,放置一个 button 按钮,将 ...
- netty 拆包和粘包 (三)
在tcp编程底层都有拆包和粘包的机制 拆包 当发送数据量过大时数据量会分多次发送 以前面helloWord代码为例 package com.liqiang.nettyTest2; public c ...
- NYOJ 一笔画问题 欧拉路
一笔画问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...
- 优酷土豆资深工程师:MySQL高可用之MaxScale与MHA
本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL ...
- POJ 3678
这道题唯一一个注意的地方是,如出现X\/Y=0这种关系时,X=0,Y=0.已经是可以肯定的关系了,所以可以连边X->-X. 我也错了上面这地方.看来,还不够.以后要细心才好. #include ...