前言
报名了java蓝桥杯,写一下每天练习的心得和leetcode记录。
二分查找
今天写二分,写烂了的板子,但是有些细节还是没注意到,水了下面这些题:
367. 有效的完全平方数
69. x 的平方根
704. 二分查找
35. 搜索插入位置
34. 在排序数组中查找元素的第一个和最后一个位置
用的板子是:
class Solution {
public int searchLeft(int[] nums, int target) {
int l = -1, r = nums.length;
while (l + 1 != r) {
int mid = l + (r - l) /2;
if (nums[mid] >= target)
r = mid;
else
l = mid;
}
if (r == nums.length || nums[r] != target)
return -1;
else
return r;
}
}
心得与总结
可能会溢出的地方:
l + (r - l) / 2;
mid < target / mid;
总之注意下乘法的溢出问题。
此外,也要注意这个板子有边界+1溢出int上限的问题,部分时候用r=numsSize
java返回数组可以写return new int[]{1,2,3};