目录
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);elsest.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;
}