二分查找思想(必须是已排序的元素):
1.定义两个指针,分别指向第一个元素和最后一个元素位置
2.利用左指针不能大于右指针写个while循环(判断条件:left <= right)
3.定义中间指针(int mid = left + (right-left)/2)
4.判断在当前指针位和给定值的大小,若当前>给定值,让其右指针变化到mid前一位,反之,当左指针变换到mid的下一位,若找到则直接返回即可。
例如:查找target在数组nums中的位置:
class Solution {
public int searchInsert(int[] nums, int target) {
//定义两个指针,一个指向第一个元素位置,一个指向最后一个元素位置
int left = 0, right = nums.length - 1;
while(left <= right){
//找到数组元素最中间位置
int mid = left + (right - left)/2;
//进行判断
if(nums[mid] == target){
return mid;
}else if(nums[mid] > target){
right = mid - 1;
}else{
left = mid + 1;
}
}
return left;
}
}
优点:折半查找,比较次数少,查找速度快,平均性能好,能更好的降低时间复杂度。
缺点:需要对查找的表排序。