今天做了几道有关数组的简单算法题,学到了二分查找,与一点点数学思维吧
LeetCode 35 ~ 二分查找
int low = 0;
int high = nums.length - 1;
while (low <= high){
int mid = (low + high) / 2;
if(target == nums[mid]) return mid;
else if(target < nums[mid]) high = mid - 1;
else if(target > nums[mid]) low = mid + 1;
}
return low;
非常完美
1.考虑了 low 大于 high 的情况
2.当low 与 high 相等的情况,搭配 else if 语句完美解决插入位置问题
3.查找不到的结果,恰好等于 low
LeetCode 1991 ~ 前缀和
class Solution1 {
//数学好,真强
public int findMiddleIndex(int[] nums) {
int total = Arrays.stream(nums).sum();//求总数和
int sum = 0;//左边和
for (int i = 0; i < nums.length; ++i) {
if (2 * sum + nums[i] == total) {//如果两倍左边之和(左右) + 分界下标数等于 总数和就返回边界下标
return i;
}
sum += nums[i];//左边界继续相加
}
return -1;//如果上面无边界,返回-1
}
}
这种有边界求和的问题,就只看单边界再乘以2
int total = Arrays.stream(nums).sum();//求总数和