首先你要明确compareTo方法是将两个字符串进行每个字符的Ascii码比较,发现不同时返回str相对位置减去key相对位置的字符的值,照你的题目,两个字符串的第一处不同出现在第一位,str的ascii码为a,key的ascii码为b所以,返回num=a-b.如果num>0;证明key的值大于了str,证明中间值出现在初始中间值的左边需要在初始中间值的左边-一位开始继续查找比如1-100之间你初始中间值为50当你要找的值<50的时候你需要在1-49之间找这时候min的值就是1不变,而最大值max成了max=50-1;反之大于了50你就需要改变最小值min=50+1;需要在51-100之间去寻找。至于为什么返回-min-1;在我看来这时候min>max返回的不过就是一个负数罢了、证明需要找的数不在这个这之间。也可以选择直接返回-1;希望能帮到你! |