目录
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;
}