LeetCode Weekly Contest 8
LeetCode Weekly Contest 8
415. Add Strings
- User Accepted: 765
- User Tried: 822
- Total Accepted: 789
- Total Submissions: 1844
- Difficulty: Easy
Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2.
Note:
- The length of both num1 and num2 is < 5100.
- Both num1 and num2 contains only digits 0-9.
- Both num1 and num2 does not contain any leading zero.
- You must not use any built-in BigInteger library or convert the inputs to integer directly.
简单的模拟题。
class Solution {
public:
string addStrings(string num1, string num2) {
int len1 = num1.length(), len2 = num2.length();
int t = 0, c = 0, i = len1-1, j = len2-1;
string ret = "";
while(i>=0 && j>=0){
c = (t + (num1[i]-'0') + (num2[j]-'0'))%10;
t = (t + (num1[i]-'0') + (num2[j]-'0'))/10;
ret.insert(ret.begin(), char('0' + c));
--i; --j;
}
while(i>=0){
c = (t + (num1[i]-'0'))%10;
t = (t + (num1[i]-'0'))/10;
ret.insert(ret.begin(), char('0' + c));
--i;
}
while(j>=0){
c = (t + (num2[j]-'0'))%10;
t = (t + (num2[j]-'0'))/10;
ret.insert(ret.begin(), char('0' + c));
--j;
}
if(t != 0){
ret.insert(ret.begin(), char('0' + t));
}
return ret;
}
};
416. Partition Equal Subset Sum
- User Accepted: 488
- User Tried: 670
- Total Accepted: 506
- Total Submissions: 1689
- Difficulty: Medium
Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.
Note:
Both the array size and each of the array element will not exceed 100.
Example 1:
Input: [1, 5, 11, 5]
Output: true
Explanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:
Input: [1, 2, 3, 5]
Output: false
Explanation: The array cannot be partitioned into equal sum subsets.
简单的单重背包问题
class Solution {
public:
bool canPartition(vector<int>& nums) {
int sum = 0, len = nums.size();
for(int i=0; i<len; ++i){
sum += nums[i];
}
if(sum%2 != 0){
return false;
}
int* dp = new int[sum/2 + 1];
for(int i=sum/2; i>=1; --i){
dp[i] = 0;
}
dp[0] = 1;
for(int i=0; i<len; ++i){
for(int j=sum/2; j>=nums[i]; --j){
if(dp[j-nums[i]]){
dp[j] = 1;
}
}
}
bool flag = (dp[sum/2]==1);
delete[] dp;
return flag;
}
};
417. Pacific Atlantic Water Flow
- User
Accepted: 259 - User
Tried: 403 - Total
Accepted: 265 - Total
Submissions: 1217 - Difficulty: Medium
Given an m x n matrix of non-negative integers representing the height of each unit cell
in a continent, the "Pacific ocean" touches the left and top edges of
the matrix and the "Atlantic ocean" touches the right and bottom
edges.
Water can only flow in four directions (up,
down, left, or right) from a cell to another one with height equal or lower.
Find the list of grid coordinates where
water can flow to both the Pacific and Atlantic ocean.
Note:
- The order of returned grid coordinates does
not matter. - Both m and n are less than 150.
Example:
Given the following 5x5 matrix:
Pacific ~ ~
~ ~ ~
~ 1
2 2 3 (5)
*
~ 3
2 3 (4) (4) *
~ 2
4 (5) 3 1 *
~ (6) (7) 1
4 5 *
~ (5) 1
1 2 4 *
* *
* * * Atlantic
Return:
[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (positions with
parentheses in above matrix).
双重bfs,
要注意不能重复采集到顶点。
class Solution {
public:
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
vector<pair<int, int>> pacificAtlantic(vector<vector<int>>& matrix) {
vector<pair<int,int>> ret;
int m = matrix.size();
if(m == 0){ return ret; }
int n = matrix[0].size();
if(n == 0){ return ret; } vector<vector<int>> cnt(m, vector<int>(n, 0));
vector<vector<int>> vis(m, vector<int>(n, 0));
int tmp, cur_x, cur_y, tmp_x, tmp_y, i = 0, j = 0;
queue<pair<int, int>> qt;
for(int i=0; i<m; ++i){
qt.push(make_pair(i, 0));
cnt[i][0] += 1;
vis[i][0] = 1;
}
for(int i=1; i<n; ++i){
qt.push(make_pair(0, i));
cnt[0][i] += 1;
vis[0][i] = 1;
}
while(!qt.empty()){
cur_x = qt.front().first; cur_y = qt.front().second;
tmp = matrix[cur_x][cur_y];
qt.pop();
for(int i=0; i<4; ++i){
tmp_x = cur_x + dx[i]; tmp_y = cur_y + dy[i];
if(tmp_x>=0 && tmp_x<m && tmp_y>=0 && tmp_y<n && !vis[tmp_x][tmp_y] && matrix[tmp_x][tmp_y]>=tmp){
qt.push(make_pair(tmp_x, tmp_y));
cnt[tmp_x][tmp_y] += 1;
vis[tmp_x][tmp_y] = 1;
}
}
}
for(int i=0; i<m; ++i){
for(int j=0; j<n; ++j){
vis[i][j] = 0;
}
}
for(int i=0; i<m; ++i){
qt.push(make_pair(i, n-1));
cnt[i][n-1] += 1;
vis[i][n-1] = 1;
}
for(int i=0; i<n-1; ++i){
qt.push(make_pair(m-1, i));
cnt[m-1][i] += 1;
vis[m-1][i] = 1;
}
while(!qt.empty()){
cur_x = qt.front().first; cur_y = qt.front().second;
tmp = matrix[cur_x][cur_y];
qt.pop();
for(int i=0; i<4; ++i){
tmp_x = cur_x + dx[i]; tmp_y = cur_y + dy[i];
if(tmp_x>=0 && tmp_x<m && tmp_y>=0 && tmp_y<n && !vis[tmp_x][tmp_y] && matrix[tmp_x][tmp_y]>=tmp){
qt.push(make_pair(tmp_x, tmp_y));
cnt[tmp_x][tmp_y] += 1;
vis[tmp_x][tmp_y] = 1;
}
}
}
for(int i=0; i<m; ++i){
for(int j=0; j<n; ++j){
if(cnt[i][j] == 2){
ret.push_back(make_pair(i, j));
}
}
}
return ret;
}
};
LeetCode Weekly Contest 8的更多相关文章
- 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 ...
- LeetCode Weekly Contest 47
闲着无聊参加了这个比赛,我刚加入战场的时候时间已经过了三分多钟,这个时候已经有20多个大佬做出了4分题,我一脸懵逼地打开第一道题 665. Non-decreasing Array My Submis ...
随机推荐
- 烂泥:学习ssh之ssh无密码登陆
本文由秀依林枫提供友情赞助,首发于烂泥行天下 最近一个月没有写过文章,主要是刚刚换的新工作.新公司服务器OS使用的是ubuntu server版,和以前熟悉的centos还是有很多不同的. 刚好这几天 ...
- 猜拳游戏GuessGame源码
该游戏是一款比较不错的猜拳游戏GuessGame源码案例,GuessGame——猜拳游戏,这也是我自己的第一款休闲类的游戏案例,游戏实现也比较简单的,希望这个能够帮大家的学习和使用,更多安卓源码尽在源 ...
- MMORPG大型游戏设计与开发(part1 of net)
网络模块的设计,是大型多人在线游戏中比较重要的一部分.我之所以将网络模块放到最前面,是因为许许多多的开发者面对这一块的时候充满了疑惑,而且也觉得很神秘和深奥.这些我们面对到的困难,其实是由于我们对这方 ...
- Docker Network containers
Network containers Estimated reading time: 5 minutes If you are working your way through the user gu ...
- UBUNTU添加新的分辨率
首先,直接运行xrandr查看下分辨率的情况: $ xrandr Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 4096 x 40 ...
- linux下内网端口转发工具:linux版lcx [实现远程内网维护]
这个工具以前使用的初衷是内网渗透,需要将内网ssh端口转发到外网服务器上.但这个工具同样适用于运维工程师进行远程内网维护. 当然这一切的前提是内网可以访问外网,检测方法当然就是直接ping 一个外网I ...
- matrix(No.1)operations
- Android中关于Volley的使用(五)从RequestQueue开始来深入认识Volley
在前面的几篇文章中,我们学习了如何用Volley去网络加载JSON数据,如何利用ImageRequest和NetworkImageView去网络加载数据,而关于Volley的使用,我们都是从下面一行代 ...
- Win7安装visual c++ 2015 redistributable x64失败
from:http://www.fxyoke.cn/forum.php?mod=viewthread&tid=1171 在win7中安装visual c++ 2015 redistributa ...
- 044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)
我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加 ...