两个数组的交集
需要注意[1,2,2] [2,2,2] 这两个数组的公共元素是[2],而不是[2,2]。
思路:
将nums1存入哈希表中,便利nums2,如果nums2的元素在nums1中,就将元素填入结果中,顺便将哈希表的位置设为false,这样就可去掉重复的元素
这道题很明显需要使用哈希表,但是不建议直接使用容器。
因为数据的取值范围,和数量都非常小,可以使用数组来进行模拟。
class Solution
{
bool hash[1010] = { 0 };
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
vector<int> ret;
for(auto x : nums1)
{
hash[x] = true;
}
for(auto x : nums2)
{
if(hash[x])
{
ret.push_back(x);
hash[x] = false;
}
}
return ret;
}
};
点击消除
这道题和括号匹配非常相似。
思路:
便利字符串,如果便利的元素与栈顶的元素相同就出栈。
注意:本题不建议使用栈结构,可以使用string,进行模拟,入栈就是位插,出站就是尾删,
如果使用栈不仅效率更低,要多一次逆置字符串。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s, st;
cin >> s;
for(auto ch : s)
{
if(st.size() && st.back() == ch) st.pop_back();
else st += ch;
}
cout << (st.size() == 0 ? "0" : st) << endl;
return 0;
}