文档章节

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

一贱书生
 一贱书生
发布于 2016/11/24 08:45
字数 286
阅读 6
收藏 0

版权声明:本文为博主原创文章,未经博主允许不得转载。

/**

 * 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置。

 */
[java] view plain copy

 

  1. /** 
  2.  * 思路:对二分查找法做修改,与mid比较的地方,如果mid为空字符串,则将mid换到离它最近的非空字符串的位置。 
  3.  * @param strings 
  4.  * @param str 
  5.  * @return 
  6.  */  
  7. public static int search(String[] strings,String str){  
  8.     if(strings==null||str==null||str=="")  
  9.         return -1;  
  10.     return searchStr(strings,str,0,strings.length);  
  11. }  
  12.   
  13. public static int searchStr(String[] strings,String str,int first,int last){  
  14.     if(first>last)  
  15.         return -1;  
  16.       
  17.     int mid=(first+last)/2;  
  18.     //若mid为空字符串,找出离它最近的非空字符串  
  19.     if(strings[mid].isEmpty()){  
  20.         int left=mid-1;  
  21.         int right=mid+1;  
  22.         while(true){  
  23.             if(left<first&&right>last)  
  24.                 return -1;  
  25.             else if(right<last&&!strings[right].isEmpty()){  
  26.                 mid=right;  
  27.                 break;  
  28.             }else if(left>first&&!strings[left].isEmpty()){  
  29.                 mid=left;  
  30.                 break;  
  31.             }  
  32.             left--;  
  33.             right++;  
  34.         }  
  35.     }  
  36.       
  37.     if(str.equals(strings[mid]))  
  38.         return mid;  
  39.     else if(strings[mid].compareTo(str)<0)  
  40.         return searchStr(strings, str, mid+1, last);//搜索右半边  
  41.     else  
  42.         return searchStr(strings, str, first, mid-1);//搜索左半边          
  43. }

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 724
码字总数 600123
作品 0
Android 面试文档分享

一、概述 最近在准备面试的东西,整理了一些读书笔记分享给各位 百度网盘地址,大家可以自由下载,以下内容完全原创。 前两部分是对于一些 经典书籍的读书笔记 和 面试题,都是上学看书的时候...

泽毛
2017/11/10
0
0
玩转算法面试:(三)LeetCode数组类问题

数组中的问题其实最常见。 排序:选择排序;插入排序;归并排序;快速排序 查找:二分查找法 数据结构:栈;队列;堆 …… 如何写出正确的程序 建立一个基础的框架,什么是正确的程序 二分查...

天涯明月笙
2017/09/20
0
0
算法编程题

1、 题目描述 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串...

tomcater
2016/07/05
174
3
JS基础(二)-12.10

(1)JS Date(日期)的显示: 输出当下时间: var m=new Date();(其中Date的“D”必须要大写) console.log(m); (2)JS中的计时器: x.setInterval("js语句",时间)(其中时间十一毫秒...

TroubleMakerLi
2017/12/14
0
0
javascript--数组

摘自ES6入门--阮一峰 扩展运算符(spread)是三个点()。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。 (1)复制数组 ES5 只能用变通方法来复制数组。 扩展运算符提供了...

前端笔记
01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

df和du命令 磁盘分区

9月25日任务 4.1 df命令 4.2 du命令 4.3/4.4 磁盘分区 df 命令 查看系统磁盘空间使用情况 常用参数 -h (human-readble) # 人性化的为空间大小转换单位显示[root@centos7 ~]# df -h文件系...

robertt15
37分钟前
3
0
【a&sAI创新】华为CloudIVS轻量云:借力打力,四两拨千斤

[摘要] 1、测评表现就目前来说,AI的门槛还是比较高的,业内所熟知的算法企业,为了追求算法的极致,比如人脸识别公司,仍在不断扩大研发...   1、测评表现   就目前来说,AI的门槛还是比...

yizhichao
54分钟前
2
0
安卓安装APK报错error: INSTALL_FAILED_UPDATE_INCOMPATIBLE

记录一个 DELETE_FAILED_INTERNAL_ERROR Error while Installing APK问题 之前遇到这个问题 方案1 将data/data/目录下该应用的包名的目录删除掉,如:adb shell rm -rf data/data/com.demo.h...

切切歆语
54分钟前
1
0
用网关zuul时,熔断hytrix里面的坑

1,zuul 默认的隔离级别是信号量,默认最大隔离信号量是100 信号量隔离和线程池隔离的区别如下: https://my.oschina.net/u/867417/blog/2120713 默认设置: 2,zuul里隔离是按服务隔离的,也...

爱吃大肉包
55分钟前
0
0
使用SSM+Solr优雅的实现电商项目中的搜索功能

在学习了Redis&Spring-Data-Redis入门和Solr&Spring-Data-Solr入门后,接下来就该是项目实战了。这次我们用Vue.JS和ElementUI写前端页面,优雅的整合SSM-Shiro-Redis-Solr框架。 手摸手教你优...

TyCoding
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部