文章目录
- 数字统计
- 分析题目
- 代码部分
- 两个数组的交集
- 题目分析
- 代码部分
- 点击消除
- 题目解析
- 代码部分
数字统计
分析题目
这个题涉及到两个知识点,就是枚举和数字的拆分
那么我的思路是进行遍历,拆分数字判断二的个数,枚举进行计数
那么数字的拆分就是通过%和/进行的
代码部分
#include <iostream>
using namespace std;
int main() {
int a=0,b=0,mark=0;
cin >> a >> b;
for(int i=a;i<=b;i++)
{
int n=i;
while(n)
{
if(n%10==2) mark++;
n=n/10;
}
}
cout << mark << endl;
}
两个数组的交集
题目分析
刚看到这个题想到用哈希表解决,但是这个题的数据不大所以如果我们用容器来解决耗时所以我想到了用数组模拟一个哈希表就能快速解决
这个题还有一个点就是例如
[1 ,2 ,2 ,2 ,2 ] 和 [ 8 ,2 ,2 ,2 ,6]
我们的返回值应该是 [ 2 ] 而不是 [ 2 ,2 ,2 ]
所以这也是我们用数组来模拟哈希表的优势,我们在每次成功判断一个数是公共的之后便把这个数从哈希表中删除,就不怕重复的问题了
代码部分
#include <algorithm>
class Solution {
bool hash[1001]={0};//开一个bool型数组来模拟哈希表
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector <int> an;//记录答案
for(auto a:nums1)
{
hash[a] = true;
}
for(auto a:nums2)
{
if(hash[a])
{
an.push_back(a);
hash[a]=false;//每次发现公公数记录后从哈希中删除
}
}
return an;
}
};
点击消除
题目解析
这道题我想到的是用栈进行解决
以示例1为例:
首先就是创建栈,之后a进栈,之后判断下一个是否与a相同相同消除不同进栈如图:
当下一个与栈顶相同时进行消除只需把栈顶元素pop即可如图:
虽然用栈来实现是完全没有问题的,但是在最后输出时由于栈的特性所以数据是反的会有点麻烦,所以我用string来模拟栈来实现功能,并且输出的时候直接输出即可
代码部分
#include <iostream>
using namespace std;
#include <string>
int main() {
string str;
cin>>str;
string an;
for(int i=0; i < str.size(); i++)
{
if(an.back()==str[i])//要是匹配【栈顶元素等于下一个要入栈的元素】即消除【出栈】
{
an.pop_back();
}
else {
an.push_back(str[i]);//正常就入栈
}
}
if(an.size()!=0)//判断最后剩余的是否为空
{
cout << an;//不为空输出消除后的结果
}
else {
cout << 0 <<endl;//空输出0,题目规定
}
return 0;
}
// 64 位输出请用 printf("%lld")