zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 10.05. 稀疏数组搜索

    题目:

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

    示例1:

    输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta"
    输出:-1
    说明: 不存在返回-1。
    示例2:

    输入:words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ball"
    输出:4
    提示:

    words的长度在[1, 1000000]之间

    分析:

    二分搜索,字符串比较,当中间为空串时,就去找左边的字符串比较,锁定新的区间范围。

    程序:

    class Solution {
        public int findString(String[] words, String s) {
            return binarySearch(words, s, 0, words.length-1);
        }
        private int binarySearch(String[] words, String s, int l, int r){
            if(l > r){
                return -1;
            }
            if(l == r){
                if(words[l].equals(s))
                    return l;
                return -1;
            }
            int mid = l + (r - l) / 2;
            if(!words[mid].equals("")){
                if(s.compareTo(words[mid]) < 0){
                    return binarySearch(words, s, l, mid);
                }else if(s.compareTo(words[mid]) > 0){
                    return binarySearch(words, s, mid+1, r);
                }else{
                    return mid;
                }
            }else{
                int left = mid-1;
                while(left >= l){
                    if(words[left].equals("")){
                        left--;
                    }else{
                        if(words[left].compareTo(s) < 0)
                            return binarySearch(words, s, mid+1, r);
                        else if(words[left].compareTo(s) > 0)
                            return binarySearch(words, s, l, left);
                        else
                            return left;
                    }
                }
                return binarySearch(words, s, mid+1, r);
            }
        }
    }
  • 相关阅读:
    css选择器
    《大巧不工》读书笔记
    《现代软件工程》实验二
    github使用心的
    ADO.NET之注入式攻击
    ADO.Net之SqlConnection、 Sqlcommand的应用(读书笔记1)
    实现划桨板块的自动轮播
    js基础
    JQuery的一些方法
    css兼容问题
  • 原文地址:https://www.cnblogs.com/silentteller/p/12487566.html
Copyright © 2011-2022 走看看