目录
1.数字统计
2.两个数组的交集
3.点击消除
1.数字统计
链接
题目非常简单,不做赘述:就是单纯利用循环逐个%2判断是否==0
详细代码:
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int l, r;
cin >> l >> r;
int cnt = 0;
for (int i = l; i <= r; ++i) {
int tmp = i;
while (tmp) {
if (tmp % 10 == 2)
cnt++;
tmp /= 10;
}
}
cout << cnt << endl;
}
// 64 位输出请用 printf("%lld")
(前三行只是为了降低cin 和 cout 的处理时间)
2.两个数组的交集
链接
我一开始的思路是找出相同元素,然后再写个去重函数去重就ok,但是这样有点麻烦,可以直接用哈希表快速解决(主要是时间复杂度也低)。
1.创建两个哈希表s1 s2,s1遍历第一个数组中的元素并存储,注意,用emplace(当然,用insert也可以,不过需要加if判断,别让哈希存储相同元素)
上端大概的意思就是emplace只有在set中不存在这个元素的时候才会插入。
2.然后set2遍历第二个数组,如果set2中已有该元素,则跳过,若没有,先存储元素到set2中,接着判断第二个数组中的元素在set1中是否存在,存在则直接存入ret(需要返回的数组)
详细代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums1 int整型vector
* @param nums2 int整型vector
* @return int整型vector
*/
unordered_set<int> s1;
unordered_set<int> s2;
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int len1 = nums1.size();
int len2 = nums2.size();
vector<int> ret;
for(int num : nums1)
s1.emplace(num);
for(int num : nums2)
{
if(s2.count(num) == 1) {}
else
{
if(s1.count(num) == 1)
ret.push_back(num);
s2.emplace(num);
}
}
return ret;
}
};
3.点击消除
链接
这道理可以直接理解为消消乐,利用栈的特性,从字符串头开始遍历,一个一个进栈,若发现s[i] = st.top(),就删除栈顶,并且遍历下一个数。
到最后将栈里面的数一个一个取出+=到ret(需要返回的字符串)中,最后reverse(逆置)就行。
详细代码:
#include <iostream>
#include <algorithm>
#include <string>
#include <stack>
using namespace std;
int main() {
string s;
cin >> s;
stack<char> st;
string tmp;
for (auto c : s) {
if (st.empty() || c != st.top())
st.push(c);
else
st.pop();
}
if (st.empty())
cout << 0 << endl;
else {
while (!st.empty()) {
tmp += st.top();
st.pop();
}
reverse(tmp.begin(), tmp.end());
cout << tmp << endl;
}
return 0;
}