class Solution1 {
public int searchInsert(int[] nums, int target) {
int head = 0;
int end = nums.length - 1;
int middle;
while (head <= end) {
middle = head + (end - head) / 2;
if (target == nums[middle]) {
return middle;
} else if (target > nums[middle]) {
head = middle + 1;
} else if (target < nums[middle]) {
end = middle - 1;
}
}
//如果没有找到,就将此元素插入到end + 1或head位置即可
return end + 1;//return head;
}
}
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
class Solution2 {
public int mySqrt(int x) {
if (x == 0) {
return 0;
}
if (x == 1) {
return 1;
}
int head = 1;
int end = x / 2;
int middle;
while (head <= end) {
middle = head + (end - head) / 2;
if (middle == x / middle) { //使用除法防止int溢出
return middle;
} else if (middle < x / middle) {
head = middle + 1;
} else if (middle > x / middle) {
end = middle - 1;
}
}
//只保留整数部分,返回的是head前数
return head - 1;
}
}
给定一个 正整数 num ,编写一个函数, 如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
class Solution3 {
public boolean isPerfectSquare(int num) {
if (num == 1) {
return true;
}
int head = 1;
int end = num / 2;
int middle;
long temp;
while (head <= end) {
middle = head + (end - head) / 2;
//此处不能使用出发,因为会损失小数
//使用乘法防止溢出,就提前转换为long类型
temp = ((long) middle * middle);
if (temp == num) {
return true;
} else if (temp < num) {
head = middle + 1;
} else if (temp > num) {
end = middle - 1;
}
}
return false;
}
}