9.5-字符串有序数组的二分查找
来源:互联网 发布:ff14npc捏脸数据 编辑:程序博客网 时间:2024/05/02 06:08
Given a sorted array of strings which is interspersed with empty strings, write a method to find the location of a given string.
Example: find “ball” in [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”, “dad”, “”, “”] will return 4
Example: find “ballcar” in [“at”, “”, “”, “”, “”, “ball”, “car”, “”, “”, “dad”, “”, “”] will return -1
可以直接遍历一遍查找,但是O(n)不够好;
因为已经排好序,所以binary search.
每次t=mid,然后遇到空格就t++直到大于high。
1.如果t>high,说明[mid, high]这一段都是空格,就需要在[low, mid-1]去找。
2.如果在[mid, t]这一段里面找到x,那么就返回。
3.如果在[mid, t]第一个不是空格的string > x, 说明x要在[low, mid-1]去找。
3.如果在[mid, t]第一个不是空格的string < x, 说明x要在[t+1, high]去找。
#include <iostream>#include <string>using namespace std;int search(string s[], int low, int high, string x){ if(x=="") return -1; while(low<=high) { int mid=low+(high-low)/2; int t=mid; while(s[t]=="" && t<=high) t++; if(t>high) { high=mid-1; } else { if(s[t]==x) return t; else if(s[t]>x) high=mid-1; else low=t+1; } } return -1;}int main(){ string s[13] = { "at", "", "", "", "ball", "", "", "car", "", "", "dad", "", "" }; cout<<search(s, 0, 12, "ball")<<endl; return 0;}
0 0
- 9.5-字符串有序数组的二分查找
- 有序数组的二分查找
- 有序数组的二分查找
- 有序数组的二分查找
- 有序数组\二分查找
- 有序数组二分查找
- 有序 循环数组的二分查找
- 旋转有序数组的二分查找
- 有序数组的二分查找程序
- 对于有序数组的二分查找算法
- 旋转有序数组的二分查找
- 基于有序数组的二分查找
- 旋转有序数组的二分查找
- 二分数组的扩展:二分查找循环有序数组
- 有序数组中的二分查找
- 有序数组之二分查找
- 二分查找(有序数组中查找需要的数)
- 循环有序数组/旋转数组的二分查找
- executeUpdate()返回值
- Linux应用总结:自动删除n天前日志
- c
- java的进程机制
- 十二生肖如何进行分手和它们分手的最佳方式,亲你同意吗?
- 9.5-字符串有序数组的二分查找
- ACM Hrbeu OJ 1001 Forests || POJ 2419
- 如何让处于两台机器上的虚拟机进行通讯
- Autodesk Vault在PDM领域中的优势
- 《Windows核心编程》复习和学习笔记!
- C#时间/日期格式大全,C#时间/日期函数大全
- Let the Balloon Rise
- 各种排序算法的分析及java实现
- 伤心总往阑珊处,兴奋总在风雨后---奋斗历程