面试题-今日头条2019笔试题
1. 字符串处理

这一题就是常规的字符串处理,需要同时满足1)出现次数>=3的一个字母只保留2个,2)出现AABB模式去掉其中一个字母
直接的办法是在原来的字符串中扫描,原地删除!可以先按照模式1删除,再按照模式2删除
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include<iostream>#include<string>using namespace std;int main(){ int N; cin>>N; for(int i=0;i<N;i++) { string s; cin>>s; int idx = 0; while(idx<s.length()){ int j = idx+1; while(j<s.length()&&s[j]==s[idx]) j++; int len = j-idx; if(len>=3){ s.erase(idx,len-2); } idx++; } idx = 0; while(idx+3<s.length()){ if(s[idx]==s[idx+1]&&s[idx+2]==s[idx+3]&&s[idx+2]!=s[idx+1]) s.erase(idx+3,1); idx++; } cout<<s<<endl; }} |
2.数组处理
我一开始的思路:
获得数组后,对每个位置向后遍历,知道出现差值>D, 然后在它们之间选择2个数,因此每一次扫描ans += C(n,2)
为什么是C(n,2)?
- 防止出现重复的组数。
假定扫描到该位置,考虑以该位置作为第一个地点,再看剩下的数字能否构成其余两个点
通过率只有20%,出现超时
- 将变量改为int型
- 边获得输入边扫描,同时用变量j来保存上一次左侧边界位置
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include<iostream>#include<vector>using namespace std;int main(){ long long N,D; cin>>N>>D; long long ans = 0; vector<long long> dis; int j = 0; for(int i=0;i<N;i++) { long long x; cin>>x; dis.push_back(x); while(i>=2 && dis[i]-dis[j]>D) j++; ans += (long long)(i-j)*(i-j-1)/2; } cout<<ans%99997867; return 0;} |
3. map的应用
这里直接应用了map - map<pair<int,int>,int> Frequency;
但是输出的却是连续的,怎么办?
分别设置 preFreq 和 Freq,每一次用Freq更新PreFreq,同时preFreq清空。
遍历的适合根据preFreq进行次数更加,就可以做到统计连续值!
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include<iostream>#include<vector>#include<map>using namespace std;int main(){ int N; cin>>N; for(int i=0;i<N;i++) { int M; cin>>M; map<pair<int,int>,int> preFreq; map<pair<int,int>,int> Freq; int ans = 1; for(int j=0;j<M;j++){ int k; cin>>k; for(int l = 0;l<k;l++){ int x,y; cin>>x>>y; if(preFreq.count(make_pair(x,y))){ preFreq[make_pair(x,y)]+=1; Freq[make_pair(x,y)]=preFreq[make_pair(x,y)]; ans = max(ans,Freq[make_pair(x,y)]); } else Freq[make_pair(x,y)]+=1; } preFreq = Freq; Freq.clear(); } cout<<ans<<endl; } return 0;} |

浙公网安备 33010602011771号