问题
用户给一个整型的数,找出它在列表中的位置?
思考
- 列表中有用户给的整型数,则返回位置;
- 列表中没有用户给的整型数,则返-1
具体思路
- 先找到最中间的值,让它和目标值去比对,如果相等,则直接返回中间值位置;
- 如果不等且中间值比目标值大,说明目标值在中间值的左边,所以此时应该让right位置等于中间位置,再次找新列表的中间位置,再去比对,直至找到目标值的位置;
- 如果不等且中间值比目标值小,说明目标值在中间值的右边,所以此时应该让left位置等于中间位置+1,因为中间位置的值已经和目标值已经比对过了,不相等,再次找中间位置,再去比对,直至找到目标值的位置;
- 如果left等于right,说明找到最后一个值了,如果这个值与目标值相等,则返回该值的位置,如果不等,则二分法找完了也没找到目标值,比当前位置的值小且上一次位置的值大,但是就是没有该值,所以返回-1.
代码实现
private int findIndex(int num) {
int[] arrs = {1, 2, 3, 5, 6};
int left = 0;
int right = arrs.length - 1;
int middle = -1;
while (true) {
if(left == right){
if(arrs[left] == num){
return left;
}
return -1;
}
middle = left + (right - left) / 2;
if (arrs[middle] == num) {
return middle;
}
if (arrs[middle] > num) {
right = middle;
} else {
left = middle + 1;
}
}
}