网站建设公司开发企业北京网站常用的seo网站优化排名
🦄个人主页:修修修也
🎏所属专栏:刷题
⚙️操作环境:牛客网
目录
一.NC95 数组中的最长连续子序列
题目详情:
题目思路:
解题代码:
二.字母收集
题目详情:
题目思路:
解题代码:
结语
一.NC95 数组中的最长连续子序列
牛客网题目链接(点击即可跳转):NC95 数组中的最长连续子序列
题目详情:
本题详情如下图:
题目思路:
本题解题思路如下:
解法一:
去重+排序后双指针统计递增序列元素个数,记录最长序列长度.时间复杂度主要是排序的复杂度O(nlogn).
解法二:
哈希遍历。用哈希表记录数据范围内这个数字是否出现过,而后遍历哈希表查看连续位置是否存在数字,统计递增序列元素个数,记录最长序列长度.但是注意本题数据范围是10^8,开这么大的整型数组会内存超限,我们可以开一个位图或者char类型的数组来标记数据是否存在,本文解题代码用的是位图。
解题代码:
本题解题代码如下:
解法1:
class Solution { public:int MLS(vector<int>& arr) {//排序sort(arr.begin(),arr.end());int lpos=0,rpos=0,max_len=0;for(int i=0;i<arr.size();i++){//判断当前数字是否和前一个构成递增if (i != 0 && arr[i]-arr[i-1] == 1) //构成递增{rpos++;if (rpos - lpos > max_len) {max_len = rpos - lpos;}}else if(i == 0 || arr[i]-arr[i-1] > 1)//不构成递增{lpos = i;rpos = i;}//这里还少一个arr[i]-arr[i-1] == 0的情况,但这种情况下我们做法是直接跳过,所以可以省略}return max_len+1;} };
解法2:
class Solution {public:int MLS(vector<int>& arr) {//排序,然后算//sort(arr.begin(),arr.end());//排序好像不行,换哈希吧//哈希空间有点问题//那就位图bitset<100000001> tmp;for (int e : arr) {tmp.set(e);}int lpos = 0, rpos = 0, max_leght = 0;for (int i = 0; i <tmp.size(); i++) {//判断是不是第一个有序的if (i == 0 || tmp.test(i) == 0) {lpos = i;rpos = i;}else {rpos++;if (rpos - lpos > max_leght) {max_leght = rpos - lpos;}}}return max_leght;} };
二.字母收集
牛客网题目链接(点击即可跳转):字母收集
题目详情:
本题详情如下图:
题目思路:
本题解题思路如下:
dp填一个二维数组即可,dp方程是:d[i][j]=自己的分+max(d[i-1][j],d[i][j-1]);
解题代码:
本题解题代码如下:
#include <iostream> #include <vector> using namespace std;int main() {//贪心int n, m;cin >> n >> m;int vvc[501][501]={0};char ch;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> ch;if (ch == 'l') vvc[i][j] = 4;else if (ch == 'o') vvc[i][j] = 3;else if (ch == 'v') vvc[i][j] = 2;else if (ch == 'e') vvc[i][j] = 1;else vvc[i][j] = 0;}}//填表:d[i][j]=自己的分+max(d[i-1][j],d[i][j-1]);int vvdp[501][501]={0};int maxs=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(i==0 && j==0)vvdp[i][j]=vvc[i][j];else if(i==0)vvdp[i][j]=vvc[i][j]+vvdp[i][j-1];else if(j==0)vvdp[i][j]=vvc[i][j]+vvdp[i-1][j];elsevvdp[i][j] = vvc[i][j] + max( vvdp[i-1][j],vvdp[i][j-1]);if(vvdp[i][j]>maxs){maxs=vvdp[i][j];}}}cout<<maxs;return 0; }
结语
说点啥好呢...