二分法查找
时间复杂度低,查找次数少
应用在有序的一组数
生活场景
猜数字1~100;告诉你猜大了,猜小了;每次对半猜,猜中的次数就最少;
假设目标数字是29;
第一次猜50,得到返回值,猜大了;
那么这个数就在1~50之间;
第二次猜25,得到返回值,猜小了;
这个数在25~50之间;
第三次猜37,得到返回值,猜大了;
这个数就在25~37之间;
第四次猜29,就会得到这个数
例1 力扣704
public int search(int[] nums, int target) {
int low = 0, high = nums.length - 1;
while (low <= high) {
int mid = (high - low) / 2 + low;
int num = nums[mid];
if (num == target) {
return mid;
} else if (num > target) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
####例2 插入位置,调用数组的方法
indexOf和sort
public class SearchInsertSolution {
public static void main(String[] args) {
int[] nums={1,3,5,6};
int target=7;
System.out.println(new SearchInsertSolution().searchInsert(nums, target));
}
public int searchInsert(int[] nums, int target) {
if (nums==null){
return -1;
}
if (nums.length<=0){
return -1;
}
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
list.add(nums[i]);
if (target==nums[i]){
return i;
}
}
list.add(target);
// 将其排序才能进一步操作
Collections.sort(list);
return list.indexOf(target);
}
}