时间:2021-07-01 10:21:17 帮助过:3人阅读
阿里巴巴这道题和微软的笔试题比较类似,相对来讲更简单一些,可以将解决那道题的思路用在这道题上。
/*题目简单描述: 根据给出的每个sql语句的执行时间,计算单个关键字的执行时间 */
/* 样例输入:
3
2.5 insert into tableA values(1,"columnA","columnB")
12.5 insert into tableB values(2,"columnA","columnB","columnC")
30.0 select columnA,columnC from tableB
4
tableB
insert
select
tableA
输出:
21.25
7.50
30.00
2.50
*/
/************************************************************************
程序代码如下:
#include <iostream> #include<iomanip> #include <vector> #include <string> using namespace std; // sqls是SQL语句列表,times是对应的执行时间,keywords是每次查询的关键词。 //返回每个关键词对应查询结果SQL集合中SQL执行时间的平均值。 vector<double> BatchQueryExecutionTime(const vector<string>&sqls, const vector<double>×, const vector<string>&keywords) { vector<double> aveTimes;//存放每个关键字对应的平均值 vector<vector<string>> sqlkeywords;//存放所有sql语句的关键字 string singlekey;//存单个关键字 vector<string> singlekeys;//存一行关键字 for (size_t i=0;i<sqls.size();i++)//sqls.size()的范围值为size_t { for(size_t j=1;j<sqls[i].size();j++)//从空格之后算起 { if (sqls[i][j] != ‘ ‘) singlekey+=sqls[i][j]; else//遇到空格 { singlekeys.push_back(singlekey); singlekey.clear();//注意清空 } } singlekeys.push_back(singlekey); singlekey.clear();//注意清空 sqlkeywords.push_back(singlekeys); singlekeys.clear();//注意清空 } for(size_t k=0;k<keywords.size();k++) { double time = 0.0; int countTime = 0; for (size_t i=0;i<sqlkeywords.size();i++) { for (size_t j=0;j<sqlkeywords[i].size();j++) { if (keywords[k] == sqlkeywords[i][j]) { time+=times[i]; countTime++; } } } if (countTime == 0)//没有出现的关键字 aveTimes.push_back(time) ; else aveTimes.push_back(time/countTime) ; } return aveTimes; } int main() { vector<double> times; vector<string> sqls; vector<string> keywords; double time; string sql; string keyword; int M;//sql语句个数 cin>>M; for(int i=0;i<M;i++) { cin>>time; times.push_back(time); getline(cin,sql);//包括了时间和sql之间的空格 sqls.push_back(sql); } int N;//关键字个数 cin>>N; for (int j=0;j<N;j++) { cin>>keyword; keywords.push_back(keyword); } vector<double> aveTimes; aveTimes = BatchQueryExecutionTime(sqls,times,keywords); for(size_t i=0;i<aveTimes.size();i++) cout<<fixed<<setprecision(2)<<aveTimes[i]<<" "; system("pause"); return 0; }
运行结果:
阿里巴巴2016笔试第一题 sql语句关键字匹配
标签: