数字统计
思路
用%10取出个位的数字,用/10迭代。
代码
#include <iostream>
using namespace std;
int main()
{
int l, r, res = 0;
cin >> l >> r;
for (int i = l; i <= r; ++i)
{
int x = i;
while (x)
{
if (x % 10 == 2) res++;
x /= 10;
}
}
cout << res << endl;
return 0;
}
- 时间复杂度: O ( n ) O(n) O(n)。 n n n是区间内的整数个数。
两个数组的交集
思路
首先将两个数组去重,然后把第一个数组的元素加到哈希表中。遍历第二个数组,如果在哈希表中已经存在,那就加到返回值中。
代码
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int, int> map;
set<int> num1(nums1.begin(), nums1.end());
set<int> num2(nums2.begin(), nums2.end());
vector<int> res;
for (auto &e : num1) map[e]++;
for (auto &e : num2)
if (map[e]) res.push_back(e);
return res;
}
};
- 时间复杂度: O ( n ) O(n) O(n)。
点击消除
思路
栈初始化:
- 创建一个栈 stk 用于存储未被消除的字符。
遍历字符串:
- 遍历字符串中的每个字符 c。
- 如果栈不为空且栈顶字符等于当前字符 c,则表示这两个字符相邻且相同,需要消除栈顶字符。
- 如果栈为空或栈顶字符不等于当前字符 c,则将当前字符压入栈中。
代码
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s;
stack<char> stk;
for (char c : s)
{
if (!stk.empty() && stk.top() == c)
stk.pop(); // 消除相邻的相同字符
else
stk.push(c); // 不相同则加入栈中
}
string res = "";
while (!stk.empty())
{
res = stk.top() + res;
stk.pop();
}
if (res.empty()) cout << "0" << endl;
else cout << res << endl;
return 0;
}
- 时间复杂度为: O ( n ) O(n) O(n)。