二分查找中的问题
循环条件为什么不是 (l<r)
第一,如果数组长度为1的话,不管查找什么都会恒定的返回-1,这显然是错的。
第二,当l + 1 = r的时候,mid=l,如果此时A[mid]小于target执行l=mid+1=r,再次循环时候while条件不满足,将退出循环,但是A[right]可能==target。考虑[3,5] k=5的情况,这时候会返
nick大神讲解
看了视频发现了一种非常巧妙的算法
那就是利用二分查找,每次的mid 都是根节点然后找他的左右节点
这种巧妙的地方总会感觉编程很有魅力
但是一看到长篇的代码就想吐。。。。
最近发现自己很多做过的题忘记了,准备再刷一遍,加油啊各位
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
if(nums.length == 0)return null;
return helper(nums, 0, nums.length-1);
}
public TreeNode helper(int [] nums, int left, int right){
if(left>right)return null;
int mid =left+(right -left)/2;
TreeNode node = new TreeNode(nums[mid]);
node.left = helper(nums, left,mid-1);
node.right = helper(nums, mid+1, right);
return node;
}
}```