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 ...
随机推荐
- android The public type classname must be defined in its own file 报错
The public type classname must be defined in its own file classname 为类名 错误提示,公用的类必髯有自己拥有独立.java文件 解 ...
- android 利用Path.cubicTo 画 贝塞尔曲线
Path.cubicTo void android.graphics.Path.cubicTo(float x1, float y1, float x2, float y2, float x3, fl ...
- python class对象转换成json/字典
# -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name ...
- 随笔:近期仍在流行的QQ盗号网页简析
前言:被盗号的人们,你们的防护意识有那么弱吗? 声明:本文提到的技术,仅可用作网络安全加固等合法正当目的.本文作者无法鉴别判断读者阅读本文的真实目的,敬请读者在本国法律所允许范围内阅读本文,读者一旦因 ...
- spring为什么不能注入static变量
Spring 依赖注入 是依赖 set方法 set方法是 是普通的对象方法 static变量是类的属性 @Autowired private static JdbcTemplate jdbcTempl ...
- 《2016ThoughtWorks技术雷达峰会----雷达新趋势》
雷达新趋势 徐昊,ThoughtWorks中国区CTO 1.Open Source open source 已经从一个简简单单的软件代码组织方式变成一种文化,一种运动.当谈到Open Sour ...
- 第15章 设备无关位图_15.3 DIB和DDB的结合
第15章 设备相关位图_15.3 DIB和DDB的结合 15.3.1 从DIB创建DDB (1)hBitmap =CreateDIBitmap(…)——注意这名称会误导,实际上创建的是DDB 参数 说 ...
- AC日记——行程长度编码 openjudge 1.7 32
32:行程长度编码 总时间限制: 1000ms 内存限制: 65536kB 描述 在数据压缩中,一个常用的途径是行程长度压缩.对于一个待压缩的字符串而言,我们可以依次记录每个字符及重复的次数.这种 ...
- EditText限制输入字符类型的几种方式
最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1.第一种方式是通过EditText的inputType来实现,可以通过xml或者Java文件来设置.假如我 ...
- sublime快捷键<转>
写在前面的话:平时做项目中在用eclipse和vs,但是对于一些小项目,感觉没有必要搞那么大的一个工具使用,比如写个小微商城,搞个小脚本了什么,所以就一直在用Sublime Text,界面清新简洁,没 ...