每日算法 LeetCode 35 / 1991

今天做了几道有关数组的简单算法题,学到了二分查找,与一点点数学思维吧

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();//求总数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值