leetcode 327题 刷题日记图示debug 理解分析

本文详细介绍了LeetCode第327题——计算数值位于[lower, upper]之间的区间和个数。讲解了如何利用前缀和与滑动窗口的方法解决问题,并探讨了代码中的关键部分,特别是防止整数溢出的注意事项。此外,还分享了独立编写的O(n^2)暴力解法。" 114666193,7337078,浏览器访问网址的完整流程解析,"['网络协议', '浏览器工作原理', 'HTTP', 'TCP/IP']
摘要由CSDN通过智能技术生成

题目:

leetcode 327题
给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower, upper] (包含 lower 和 upper)之内的 区间和的个数 。
区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。 来源:力扣(LeetCode)
题目链接:https://leetcode-cn.com/problems/count-of-range-sum

代码:

【源自labuladong的解析 链接:https://labuladong.gitee.io/algo/2/19/38/
运行时间:62ms
运行内存:59.7MB
【注:自己写的是时间复杂度为O(n^2)的暴力解,通过案例92.54%。剩余的因为超出时间限制无法通过。暴力解能写出来。代码最后给出】
**给的解析代码的重点:**在merge方法中的count=count+end-start的那一部分代码的含义:滑动窗口为end-start,使得窗口内的元素与num[i]的差落在[lower,upper]内

这题需要注意的一个点是,会溢出int类型数据范围,需要使用long类型存储。【int:(-2147483648,2147483647)2的31次方;long:(-9223372036854774808,9223372036854774807)2的63次方】

class Solution{
   
        private int lower, upper;

        public int countRangeSum(int[] nums, int lower, int upper) {
   
            this.lower = lower;
            this.upper = upper;
            // 构建前缀和数组,注意 int 可能溢出,用 long 存储
            long[] preSum = new long[nums.length + 1];
            for (int i = 0; i < nums.length; i++) {
   
//                第一个位置不存,为初始化的值0
                preSum[i + 1] = (long)nums[i] + preSum[i];
            }
            System.out.println("原数组前缀和数组:"+Arrays.t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值