题解 | #在有序但是含有空的数组中查找字符串#

在有序但是含有空的数组中查找字符串

http://www.nowcoder.com/practice/92c172ef7c6d4ccc8f3103c3bc36cae2

//再介绍使用二分查找的方法
//本题字符串数组是递增的,所以很容易想到用二分法
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    string str;
    cin>>str;
    string arr[n];
    for(int i=0;i<n;i++)
        cin>>arr[i];
    int l=0,r=n-1;
    while(l<=r){
        int mid=(l+r)/2;
        if(arr[mid]=="0"){//当前遇到了空字符串
            int temp=r;//记下当前r所在的位置
            r=mid-1;
            while(r>=l&&arr[r]=="0"){
                r--;
            }
            if(r<l){//说明左半区全是空字符串
                l=mid+1;
                r=temp;
            }
            else{//说明遇到了非空字符串
                if(arr[r]>=str){
                    continue;
                }
                else{
                    r=temp;
                    l=mid+1;
                }
            }
        }
        if(arr[mid].compare(str)==0){//相等,找最左位置
            r=mid-1;
        }
        
        
        
        else if(arr[mid].compare(str)<0){//比str小
            l=mid+1;
        }
        
        
        else {
            r=mid-1;
        }
        
        
    }
    if(arr[l].compare(str)==0)
        cout<<l<<endl;
    else cout<<-1<<endl;
    return 0;
}
全部评论

相关推荐

“校招”、“3-5年经验”
xiaolihuam...:逆向工程不是搞外挂的吗,好像现在大学生坐牢最多的就是诈骗罪和非法侵入计算机系统罪,发美金,还居家办公,就是怕被一锅端,
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务