本篇文章包含三道算法题,难度由浅入深,适合新手练习哟
目录
第一题
题目链接
题目解析
代码原理
代码编写
本题总结
第二题
题目链接
题目解析
代码原理
代码编写
第三题
题目链接
题目解析
代码原理
代码编写
第一题
题目链接
[NOIP2010]数字统计_牛客题霸_牛客网
题目解析
举例:【2,22】
有2的数字有2, 12, 20, 22四个数字,题目要求是输出在区间【2,22】中2出现了几次,需要注意的是这里的2出现了几次包含十位上的2和个位上的2。
代码原理
取出十位和个位的2,再使用if语句进行判断,如果等于2则计数变量+1
代码编写
#include<iostream>
using namespace std;
int main()
{
long long a = 0, b = 0;
int count = 0;
cin >> a >> b;
for(; a <= b; a++)
{
int tmp = a;
while(tmp)
{
int n = tmp % 10;
if(n == 2)
{
count++;
}
tmp /= 10;
}
}
cout << count << endl;
return 0;
}
本题总结
取个位和十位的数的固定套路:循环 变量 (1)%10; 变量(1) / 10;
第二题
题目链接
两个数组的交集_牛客题霸_牛客网 (nowcoder.com)
题目解析
题目要求:返回两个数组中相同的数字
代码原理
代码编写
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// write code here
int hash[1010] = { 0 };
vector<int> ret;
//将容器nums1中的元素存放进哈希中
for(auto cur : nums1)
{
hash[cur] = cur;
}
//将哈希中的元素与容器nums2中的元素进行匹配
for(auto cur : nums2)
{
if(hash[cur])//哈希中的元素与nums2中的匹配上时,即hash[cur] = true
{
ret.push_back(hash[cur]);
hash[cur] = false;
}
}
return ret;
}
};
第三题
题目链接
点击消除_牛客题霸_牛客网 (nowcoder.com)
题目解析
题目要求:删除相同且相邻的字母
代码原理
相邻且相同,因此要删除
最后返回栈内的元素即可
代码编写
#include <iostream>
#include<string>
using namespace std;
int main() {
string s,st;
cin >> s;
for(auto cur : s)
{
if(st.size() && st.back() == cur)
st.pop_back();
else
st.push_back(cur);
}
cout << (st.size() == 0?"0":st);
}
本篇文章的算法题内容就先到这里,喜欢我的文章的小伙伴,可以给我点个关注,要不然下次可能就找不到我了。
都看到这里了,给个三连呗!!!