[NOIP2010]数字统计
题目链接:[NOIP2010]数字统计_牛客题霸_牛客网 (nowcoder.com)
思路:统计[L,R] 区间内的每一个数中2的个数 将每个数的每一位拆开 累加即可
时间复杂度 区间长度 * 每一个数字的位数 最大 1e5 * 5 不会卡时间。
AC代码:
#include<iostream>
using namespace std;
const int N = 15;
int a[N];
int l,r;
int main()
{
cin >> l >> r;
for(int i = l ; i <= r; i ++)
{
int tmp = i;
while(tmp)
{
a[tmp % 10] ++ ;
tmp /= 10;
}
}
cout << a[2] << endl;
return 0;
}
NC313 两个数组的交集
题目链接:两个数组的交集_牛客题霸_牛客网 (nowcoder.com)
思路:双指针遍历两个数组所有元素 将相同元素添加到一个新数组中 最后排序去重即可
下为排序去重的板子。
时间复杂度O(N^2);
AC代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums1 int整型vector
* @param nums2 int整型vector
* @return int整型vector
*/
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
vector<int> num3;
for(int i = 0; i < nums1.size(); i ++)
for(int j = 0; j < nums2.size(); j ++)
if(nums1[i] == nums2[j])
num3.push_back(nums1[i]);
sort(num3.begin(), num3.end());
num3.erase(unique(num3.begin(), num3.end() ), num3.end());
return num3;
}
};
AB5 点击消除
题目链接:点击消除_牛客题霸_牛客网 (nowcoder.com)
思路:用循环单指针很难在存在删除的情况下将元素同时前后比较 形如:
再删除 b b 后 不易将 aa cc 删除 故可用 栈 的形式。 即新入栈元素若与栈顶相同则将栈顶弹出
否则入栈。
AC代码:
#include<iostream>
#include<string>
#include<algorithm>
#include<stack>
using namespace std;
string s;
string ans = "";
stack<char> st;
int main()
{
cin >> s;
for(auto c: s)
{
if(st.size())
{
auto t = st.top();
if(c == t) st.pop();
else st.push(c);
}
else st.push(c);
}
while(st.size())
{
ans += st.top(); st.pop();
}
reverse(ans.begin(), ans.end());
if(ans == "") cout << 0 << endl;
else cout << ans << endl;
return 0;
}