字符串问题之 在有序但含有空的数组中查找字符串

尽可能使用二分查找

   假设在 left  right 之间查找  

    关键是mid处理过程 导致 left 跟 right 的改变  控制去哪里寻找

    分如下情况:

   若 mid处 不为空,并且 此处就是 str   那么记下 mid  ,同时把right-1   (往左寻找)

   若 mid处不为空,并且此处不是str,比较字典顺序

   若 mid处为空, 则通过while控制向左边移动,左边没有元素,或者找到的字典顺序小于str,left=mid+1

                           字典顺序大于str  或者等于 str  此时 res = strs[i].equals(str) ? i : res        然后right=i-1;  注意是i-1  此处的位置-1

package TT;import java.awt.List;public class Test3 {public static int getIndex (String[] strs, String str){if(strs==null || strs.length==0 ||str ==null){return -1;}int res = -1;int left =0;int right = strs.length;int mid = 0;int i =0;while(left <= right){mid=(left+right)/2;if(strs[mid]!=null && strs[mid].equals(str)){res = mid;right = mid-1;}else if(strs[mid]!=null){if(strs[mid].compareTo(str)<0){left = mid+1;}else {right = mid-1;}}else{i = mid;   //把此时的mid记下了while(strs[i]==null && --i>=left);if(i<left || strs[i].compareTo(str)<0){left = mid+1;}else{res =strs[i].equals(str) ? i :res;right = i-1;}}}return res;}public static void main(String[] args){String[] objects = new String[6];objects[0]=null;objects[1]="b";objects[2]=null;objects[3]="b";objects[4]=null;objects[5]="a";String s = "b";int a = getIndex(objects,s);System.out.println(a);} }

  

转载于:https://www.cnblogs.com/toov5/p/7398958.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python_48re模块的sub方法

sub是替换的功能 sub(模型&#xff0c;替换为的字符&#xff0c;目标原字符串&#xff0c;替换次数) import re yuanchuan1qaz2wsx3edc4rfv5tgb new_strre.sub(\d,INTNUM,yuanchuan,2) #若果没有2表示默认替换所有的 print (new_str) #输出结果为&#xff1a;INTNUMqazINTNUMw…

个人笔记-vuex

个人笔记-vuex 最近想要沉淀下自己的知识体系&#xff0c;以前光看不记&#xff0c;当时记得&#xff0c;过段时间记忆就模糊了&#xff0c;好脑子不如烂笔头&#xff0c;古人诚不欺我&#xff0c;所以现在决定给用自己的语言方式来给自己记个笔记。 vuex vuex 有什么好讲的呢&…

常用模块之hashlib,configparser,logging模块

常用模块二 hashlib模块 hashlib提供了常见的摘要算法&#xff0c;如md5和sha1等等。 那么什么是摘要算法呢?摘要算法又称为哈希算法、散列算法。它通过一个函数&#xff0c;把任意长度的数据转换为一个长度固定的数据串&#xff08;通常用16进制的字符串表示&#xff09;。 注…

iPhone屏幕各种尺寸分辨率(更新至XS)

iPhone屏幕各种尺寸分辨率&#xff08;更新至XS&#xff09; DeviceLogic PointLogic PixelSizeScaleiPhone 2G480 320480 3203.51xiPhone 3480 320480 3203.51xiPhone 3GS480 320480 3203.51xiPhone 4480 320960 6403.52xiPhone 4S480 320960 6403.52xiPhone 5568 …

浙江嘉兴徒步游

最近参加了一个徒步团&#xff0c;趁着周末时光&#xff0c;来了一场徒步旅游&#xff0c;不一样的体验图片发自简书App一开始进山探秘外蒲岛的路程&#xff0c;荒草丛生图片发自简书App树木郁郁葱葱&#xff0c;蓝天白云&#xff0c;一切都很没好图片发自简书App漫山遍野都开满…

ASP.NET Web API 2 过滤器

前言 我们知道 ASP.NET Web API 过滤器&#xff0c;也是属于消息处理机制中的一部分。正因如此&#xff0c;我们经常使用它来完成对请求的授权验证、参数验证&#xff0c;以及请求的 Log 记录&#xff0c;程序异常捕获等。 1. 常用的四大过滤器 ASP.NET Web API 2 中的所有…

java的ThreadLocal类的使用方法

java的ThreadLocal类的使用方法&#xff0c;ThreadLocal是一个支持泛型的类&#xff0c;用在多线程中用于防止并发冲突问题。比如以下的一个样例&#xff0c;就是用于线程添加1&#xff0c;可是相互不冲突 package com.test.threadlocal;import java.util.concurrent.ExecutorS…

为选择合适的ERP供应商,是否该发布需求建议书(RFP)?

全球有成百上千家企业资源规划 (ERP) 解决方案供应商。在开展挑选 ERP 供应商的项目时&#xff0c;不可能与所有这些供应商都进行接触。不断缩小这一领域供应商的范围&#xff0c;直到最终敲定最适合的入围名单&#xff08;通常被称为“最终候选人名单”&#xff09;是项目成功…

kettle插入更新流程

kettle转换步骤工作组件 这里有四个类构成了这个kettle 步骤/节点&#xff0c;每一个类都有其特定的目的及所扮演的角色。 TemplateStep: 步骤类实现了StepInteface接口&#xff0c;在转换运行时&#xff0c;它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实…

打开mobilenet——ssd的demo.py显示这样的错误解决方法:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.s

终于找到方法了&#xff1a; ubuntu14.04打开终端&#xff1a; conda install nomkl numpy scipy scikit-learn numexpr conda remove mkl mkl-service一切ok。。。。。

C++ class、struct区别

一、默认访问控制不同&#xff08;最主要&#xff09; struct默认为public&#xff0c;class默认为private。这个访问控制既是指成员的默认访问属性&#xff0c;又指继承时默认的继承属性。 二、定义template时不同 在模版中&#xff0c;类型参数前面可以使用class或typename&a…

Alpine Linux详解

简介 Small. Simple. Secure.Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox. Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版。 Alpine 的意思是“高山的”&#xff0c;它采用了musl libc和busybox以减…

java stream 原理

java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字&#xff0c;然后从中选出最长的一个&#xff0c;并输出其长度 1. 最直白的实现 缺点 迭代次数过多频繁产生中间结果&#xff0c;性能无法接受2. 平常写法 int …

ubuntu文本模式获得权限修改profile

针对ubuntu14.04以下&#xff0c;越旧版本&#xff0c;旧的指令也有效。 进入登录页面&#xff0c;按shiftaltF1进入root环境&#xff0c;验证用户名密码。 然后输入&#xff1a;cd /etc 进入etc文件 在输入&#xff1a;/usr/bin/sudo vi profile 进入profile文件的文本编辑模…

here文档 here doc EOF重定向

here文档 here doc EOF重定向 http://www.cnblogs.com/xiangzi888/archive/2012/03/24/2415077.html 在shell脚本程序中&#xff0c;向一条命令传递输入的一种特殊方法是使用here文档。一个here document就是一段带有特殊目的的代码段。它使用I/O重定向的形式将一个命令序列传…

Java常量池理解与总结

2019独角兽企业重金招聘Python工程师标准>>> 一.相关概念 什么是常量用final修饰的成员变量表示常量&#xff0c;值一旦给定就无法改变&#xff01;final修饰的变量有三种&#xff1a;静态变量、实例变量和局部变量&#xff0c;分别表示三种类型的常量。Class文件中…

转载:https://blog.csdn.net/dcrmg/article/details/52939318

张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析&#xff08;附标定程序和棋盘图&#xff09;使用Opencv实现张正友法相机标定之前&#xff0c;有几个问题事先要确认一下&#xff0c;那就是相机为什么需要标定&#xff0c;标定需要的输…

Redis学习笔记--Redis数据过期策略详解==转

本文对Redis的过期机制简单的讲解一下  讲解之前我们先抛出一个问题&#xff0c;我们知道很多时候服务器经常会用到redis作为缓存&#xff0c;有很多数据都是临时缓存一下&#xff0c;可能用过之后很久都不会再用到了&#xff08;比如暂存session&#xff0c;又或者只存放日行…

会员连锁配置以及金额走向

PS&#xff1a;所有电子支付方式的资金走向都是同样的&#xff0c;配置的是什么支付方式就走什么支付方式;下面以支付宝为例说明 一、连锁非总机模式 资金走向&#xff1a; 支付宝&#xff1a;收到的钱在主账号配置的支付宝&#xff0c;会员卡的金额在主账号 微信&#xff1a;收…

Python标准模块--logging

Python标准模块--logging参考http://www.cnblogs.com/zhbzz2007/p/5943685.html1 logging模块简介logging模块是Python内置的标准模块&#xff0c;主要用于输出运行日志&#xff0c;可以设置输出日志的等级、日志保存路径、日志文件回滚等&#xff1b;相比print&#xff0c;具备…