博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Cracking the Coding Interview》——第11章:排序和搜索——题目5
阅读量:5346 次
发布时间:2019-06-15

本文共 1874 字,大约阅读时间需要 6 分钟。

2014-03-21 21:37

题目:给定一个字符串数组,但是其中夹杂了很多空串“”,不如{“Hello”, “”, “World”, “”, “”, “”, “Zoo”, “”}请设计一个算法在其中查找字符串。

解法:要么一次性将其中夹杂的空串去掉,要么在二分查找的过程中逐个跳过空串。反正整体思路仍是二分。

代码:

1 // 11.5 Given an array of strings interspersed with empty string ""s. Find out if a target string exists in the string. 2 #include 
3 #include
4 #include
5 using namespace std; 6 7 int main() 8 { 9 int i, j, n;10 int ns;11 string s;12 vector
v;13 int ll, rr, mm;14 15 while (cin >> n && n > 0) {16 cin >> ns;17 for (i = 0; i < ns; ++i) {18 v.push_back("");19 }20 for (i = 0; i < n; ++i) {21 cin >> s;22 v.push_back(s);23 cin >> ns;24 for (j = 0; j < ns; ++j) {25 v.push_back("");26 }27 }28 cin >> s;29 30 ll = 0;31 while (v[ll] == "") {32 ++ll;33 }34 rr = (int)v.size() - 1;35 while (v[rr] == "") {36 --rr;37 }38 while (ll <= rr) {39 mm = (ll + rr) / 2;40 while (v[mm] == "") {41 // go left or right, either is OK.42 --mm;43 }44 if (s > v[mm]) {45 ll = mm + 1;46 while (ll <= rr && v[ll] == "") {47 ++ll;48 }49 } else if (s < v[mm]) {50 rr = mm - 1;51 while (rr >= ll && v[rr] == "") {52 --rr;53 }54 } else {55 break;56 }57 }58 printf("%d\n", (ll <= rr ? mm : -1));59 60 v.clear();61 }62 63 return 0;64 }

 

转载于:https://www.cnblogs.com/zhuli19901106/p/3616786.html

你可能感兴趣的文章
UILabel
查看>>
【热门技术】三种SEO方式
查看>>
[Hades_技术]哈迪斯初级技术应用
查看>>
SQLiteOpenHelper
查看>>
Luogu P1141 01迷宫【搜索/dfs】By cellur925
查看>>
js onclick事件传参
查看>>
WiCloud 商业Wi-Fi管理平台
查看>>
团队项目--未完待续
查看>>
双重标准,我该怎么解决
查看>>
python中的网页标签等字符处理
查看>>
Mybatis输入类型和结果类型
查看>>
Linux常用命令(五)
查看>>
Linux常用命令(四)
查看>>
Linux常用命令(六)
查看>>
Linux常用命令(六)
查看>>
Linux常用命令(八)
查看>>
Linux常用命令(七)
查看>>
Linux常用命令(九)
查看>>
Linux常用命令(十一)
查看>>
Linux常用命令(十)
查看>>