• careercup-排序和查找 11.5


    11.5 有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置。

    解法:

    如果没有那些空字符串,就可以直接使用二分查找法。比较待查找字符串str和数组的中间元素,然后继续搜索下去。针对数组中散布一些空字符串的情形,我们可以对二分查找法稍作修改,所需的修改就是mid进行比较的地方,如果mid为空字符串,就将mid换到离它最近的非空字符串的位置。

    C++实现代码:

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    int searchR(vector<string> &str,int left,int right,string s)
    {
        if(left>right)
            return -1;
        int mid=(left+right)/2;
        if(str[mid].empty())
        {
            int l=mid-1;
            int r=mid+1;
            while(1)
            {
                if(l<left&&r>right)
                    return -1;
                if(l>=left&&!str[l].empty())
                {
                    mid=l;
                    break;
                }
                if(r<=right&&!str[r].empty())
                {
                    mid=r;
                    break;
                }
                l--;
                r++;
            }
        }
        if(str[mid]==s)
            return mid;
        else if(s<str[mid])
            return searchR(str,left,mid-1,s);
        else
            return searchR(str,mid+1,right,s);
    }
    
    int search(vector<string> &str,string s)
    {
        return searchR(str,0,str.size()-1,s);
    }
    
    int main()
    {
        vector<string> vec= {"","abc","","hfh","jhfh","kdhf","","sss","zzz",""};
        cout<<search(vec,string("zzz"))<<endl;
    }
  • 相关阅读:
    poj 1273 Drainage Ditches
    网络流之--混合图的欧拉回路 出自yzmduncan.iteye.com/blog/1149049
    hdu 2203 亲和串 kmp
    hdu 1711 kmp
    KMP算法详解 出自matrix67.com
    zoj 2016 Play on Words 欧拉回路
    修改document.domain的注意事项(转)
    ActiveXObject函数详解(转)
    angularjs
    sbt
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4153538.html
Copyright © 2020-2023  润新知