二分查找
- 解决什么问题?
寻找数组中某一个元素 - 使用二分查找的前提条件是什么?
数组的有序,且元素不重复 - 解决问题的思路是什么?
- (1)设置两指针,low和high,分别指向数组的首部和尾部
- (2)不断的将问题的规模缩小,直至low>high,循环结束(while)循环
- (3)mid指针应该设为mid=low+(high-low)/2,其值实际上等于mid = low+high/2,,但low+high/2容易导致溢出
- (4)问题的关键点:low、high指针的移动方法,当mid>target 时,high=mid-1,当mid<target时,low = mid+1;
- (5)target == nums[mid],返回mid
- (6)循环退出后,则说明没有找到相关元素,返回-1
题:
力扣连接:二分查找1
代码:
class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length-1;
if(target<nums[low]||target>nums[high]) return -1;
while(low<=high){
int mid = low+(high-low)/2;
if(nums[mid]<target){
low = mid+1;
}
else if(nums[mid]>target){
high = mid -1;
}
else if(nums[mid]==target)
return mid;
}
return -1;
}
}
扩展知识:Java中length、size()、length()有什么不同?
- length是属性,一般用来返回数组的长度等
- length()是方法,其用来计算字符串的长度
- size(),是size() 方法返回集合中当前存在的元素数,是根据元素的数量而变化