二分法相关知识必须掌握,吃透,关于二分法的查找思想请见文章:代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
这里讲解了数据相关知识,二分法的查找思想等等
35.搜索插入位置
力扣链接
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
代码:
public static int searchInsert(int[] nums,int target){
int left = 0;
int right = nums.length-1;
while(left<=right){
int mid = left+(right-left)/2;
if(nums[mid] >= target){
right = mid-1;
}
else {
left = mid+1;
}
}
return left;
}
69. x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
public static int mySqrt(int x) {
int left = 0;
int right = x/2+1;
while(left<=right){
int mid = left +(right-left)/2;
if((long)mid*mid == x){
return mid;
}
else if((long)mid*mid < x){
left = mid+1;
}
else{
right = mid-1;
}
}
return right;
}
注意:right的边界值和mid*mid的类型转化
367. 有效的完全平方数
给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积
public static boolean isPerfectSquare(int num) {
int left = 0;
int right = num/2+1;
while(left<=right){
int mid = left+(right-left)/2;
if((long)mid*mid<num){
left=mid+1;
}
else if((long)mid*mid>num){
right = mid-1;
}
else{
return true;
}
}
return false;
}
总结:这三道其实都很简单,是二分法很好的应用,值得注意的是69题中的细节,即:right的边界值和mid*mid的类型转化