目录
因昨天看完题目太晚了,没来得及写博客,所以今天把博客给补上,今天的编程训练晚上会继续更新.
一.日常训练题目
1.1 排序子序列
1.1.1 题目描述
链接:排序子序列_牛客笔试题_牛客网
来源:牛客网
牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2
输入描述:
输入的第一行为一个正整数n(1 ≤ n ≤ 10^5) 第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。
输出描述:
输出一个整数表示牛牛可以将A最少划分为多少段排序子序列
示例:
输入
6
1 2 3 2 2 1
输出
2
1.1.2 思路剖析
对应的代码如下:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
//第一步就是先把键盘输入的信息给读取出来
int n=0;
cin>>n;
//开辟一个数组
vector<int> a;
a.resize(n+1);
//利用循环进行读入数据
for(int i=0;i<n;i++)
{
cin>>a[i];
}
//因为输入的所有的值都是正整数
//所以可以在数组尾添加一个数字为0,
//不会影响到子序列的个数
a[n]=0;
//利用while循环进行判断
int i=0;
int count=0;
while(i<n)
{
//这个会出现以下三种情况
//a[i]<a[i+1] 非递减子序列
//a[i]==a[i+1] 不会影响到子序列的个数 继续往后走就可以
//a[i]>a[i+1] 非递增子序列
if(a[i]<a[i+1])
{
//进入了一个非递减子序列
//因为a[i]==a[i+1]在进入数组的时候
//并不会影响到对应的子序列个数
while(i<n&&a[i]<=a[i+1])
{
i++;
}
//跳出去循环说明不符合
count++;
i++;
}
else if(a[i]==a[i+1])
{
//不会先创建一个子序列
i++;
}
else
{
//进入了一个非递增的子序列
while(i<n&&a[i]>=a[i+1])
{
i++;
}
count++;
i++;
}
}
cout<<count<<endl;
return 0;
}
我们对应这三种情况,把代码放在VS2019下,进行验证一下i和count是否符合我们的推理.
1.最后一组序列是非递减序列
2. 最后一组序列是非递增序列,但数组的最后一个数字不为0
3.最后一组序列是非递增序列,且数组的最后一个数字为0
2.1 倒置字符串
2.1.1 题目描述
链接: 倒置字符串_牛客题霸_牛客网
来源:牛客网
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例:
输入:I like beijing.
输出:beijing. like I
2.1.2 思路剖析
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
getline(cin,s);
//先把整个句子进行翻转
reverse(s.begin(),s.end());
//然后再进行单词的翻转
auto start=s.begin();
while(start!=s.end())
{
//继续进行执行
//找到第一个' '处或者string.end()处则会结束
//end和start其实本质上都是一个迭代器
//相当于一个指针类型
auto end=start;
while(end!=s.end()&&*end!=' ')
{
//执行操作end++
end++;
}
//出循环则代表遍历到' '处,或者是遍历到string.end()处
reverse(start,end);
if(end!=s.end())
{
//说明这里只是遍历到' '处
//同样这时要把' '给跳过去,遍历下一个字符
end++;
start=end;
}
else
{
//遍历到string.end()
start=end;
}
}
cout<<s<<endl;
}
这个题目其实也就是对string字符串的理解,挺有意思的,对reverse和string.begin()和string.end()都有了全新的认识和理解.
二.总结
总结:今天对string有了新的认识,继续加油!星光不负赶路人,努力就能得到自己想要的东西!!!