目录
022:求最小公倍数
023:数组中的最长连续子序列
024:字母收集
022:求最小公倍数
求最小公倍数_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
求最小公倍数公式:lcm(a,b)=a*b/gcd(a,b),gcd(a,b)为a,b之间的最小公因数,递归求最小公因数。
#include <iostream>
using namespace std;
//求最小公因数
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
int main()
{
int A,B;
cin>>A>>B;
cout<<A*B/gcd(A,B)<<endl;
}
023:数组中的最长连续子序列
数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com)
1.哈希集合的快速查找
class Solution {
public:
int MLS(vector<int>& arr)
{
int ret=0;
unordered_set<int> hashSet;
int i=arr.size();
for(auto t:arr)
{
hashSet.insert(t);
}
for(auto t:arr)
{
if(hashSet.count(t-1)) continue;
int len=1;
while(hashSet.count(++t)) len++;
ret=max(ret,len);
}
return ret;
}
};
024:字母收集
字母收集_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
动态规划:创建dp表保存到{i,j}位置的最大分数,由于只能向下和向右,最终会到{m,n},最后结果也为dp[m][n]。
#include <iostream>
using namespace std;
const int N=510;
char g[N][N];
int dp[N][N];
int m,n;
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>g[i][j];
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
int t=0;
if(g[i][j]=='l') t=4;
else if(g[i][j]=='o') t=3;
else if(g[i][j]=='v') t=2;
else if(g[i][j]=='e') t=1;
dp[i][j]=max(dp[i-1][j], dp[i][j-1])+t;
}
}
cout<<dp[m][n]<<endl;
return 0;
}