池塘计数
题目:池塘计数
思路:dfs
#include <bits/stdc++.h>
using namespace std;
const int N=1009;
int dx[8]={1,1,1,0,0,-1,-1,-1};
int dy[8]={-1,0,1,-1,1,-1,0,1};
char mp[N][N];
void dfs(int x,int y)
{
mp[x][y]='.';
for(int i=0;i<8;i++)
if(mp[x+dx[i]][y+dy[i]]=='W')
dfs(x+dx[i],y+dy[i]);
}
int main()
{
int n,m;
int ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mp[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(mp[i][j]=='W')
{
dfs(i,j);
ans++;
}
}
}
cout<<ans;
}
LeetCode349.两个数组的交集
题目:两个数组的交集
方法一
思路:哈希表
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> r_set(nums1.begin(),nums1.end());
unordered_set<int> result;
for(auto i:nums2)
{
if(r_set.find(i)!=r_set.end())
result.insert(i);
}
return vector<int>(result.begin(),result.end());
}
};
方法二:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int hash[1005]={0};
unordered_set<int> result;
for(int i=0;i<nums1.size();i++)
hash[nums1[i]]=1;
for(int i=0;i<nums2.size();i++)
if(hash[nums2[i]])
result.insert(nums2[i]);
return vector<int>(result.begin(),result.end());
}
};
LeetCode202.快乐数
题目:快乐数
class Solution {
public:
int SUM(int n)
{
int s=0;
while(n)
{
s+=(n%10)*(n%10);
n=n/10;
}
return s;
}
bool isHappy(int n) {
unordered_set<int> set;
while(1)
{
int sum=SUM(n);
if(sum==1)
return true;
if(set.find(sum)!=set.end())
return false;
set.insert(sum);
n=sum;
}
}
};
LeetCode1.两数之和
题目:两数之和
思路:unordered_map
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> map;
for(int i=0;i<nums.size();i++)
{
int k=target-nums[i];
if(map.find(k)!=map.end())
return {map[k],i};
map[nums[i]]=i;
}
return {};
}
};
LeetCode454.四数相加
题目:四数相加
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int,int> map;
for(int a:A)
for(int b:B)
map[a+b]++;
int count=0;
for(int c:C)
for(int d:D)
if(map.find(0-(c+d))!=map.end())
count+=map[0-(c+d)];
return count;
}
};
LeetCode541.反转字符串
题目:反转字符串
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i=i+2*k)
{
if(i+k<s.size())
{
reverse(s.begin()+i,s.begin()+i+k);
continue;
}
else
reverse(s.begin()+i,s.end());
}
return s;
}
};
剑指Offer58-||.左旋转字符串
题目:左旋转字符串
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(),s.begin()+n);
reverse(s.begin()+n,s.end());
reverse(s.begin(),s.end());
return s;
}
};