zoukankan      html  css  js  c++  java
  • 稀疏数组搜索(leetcode)

    题目链接:面试题 10.05. 稀疏数组搜索 - 力扣(LeetCode) (leetcode-cn.com)

    题目描述:

    稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。

    示例:

    示例1:
    
     输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta"
     输出:-1
     说明: 不存在返回-1。
    示例2:
    
     输入:words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ball"
     输出:4
    提示:
    
    words的长度在[1, 1000000]之间

    题目分析:

    使用极其标准的二分查找模板,再加上搜索mid时的线性查找得

    源码:

    #include<bits/stdc++.h>
    #include<unordered_map>
    using namespace std;
    int main()
    {
        vector<string>words = { "CitZMIXZKoFbxvOlaza", "hBlKXdKJfBD" };
        string s("hBlKXdKJfBD");
    
        int l = 0, r = words.size() - 1, mid;
        while (l <= r)
        {
            mid = (l + r) >> 1;
            while (words[mid] == "" && mid < r)//线性查找符合要求的mid值
            {
                mid++;
            }
            if (words[mid].compare(s) == 0)
            {
                r = mid;
                break;
            }
            if (mid == r )
            {
                r = mid - 1;
                continue;
            }
            if (words[mid].compare(s) < 0)
                l = mid + 1;
            else
                r = mid - 1;
    
        }
        cout << (words[r].compare(s) == 0 ? r : -1);
    }
    /*
        vector<string>words = { "at", "", "", "", "ball", "", "", "car", "", "","dad", "", "" };
        string s("ta");
        -1
    
            vector<string>words = { "E jgeVQIZI", "EMuBXhHEDpDOS", "HhYVhpQjIaEsZtHQKy", "IOBAEIbBnjO", "MyHjLicHnzyrvRxvtw", "WYt DPvcv", "c" };
        string s("EMuBXhHEDpDOS");
        1
    */
  • 相关阅读:
    Linux学习之路——ls命令及文件权限
    解析规范格式的日志文件至List中
    Flask
    GIT和github
    常见的面试题
    python—面向对象的封装
    作业—数据类型8.20
    练习—8.17 while循环
    s7day2
    oracle 开窗分析函数和树形结构
  • 原文地址:https://www.cnblogs.com/zjw1324399/p/14586681.html
Copyright © 2011-2022 走看看