Leetcode日常挑战 2022/06/03

第一次碰到了medium难度的题,好那个窒息啊我的天,这比easy难太多了吧,我真的无语,倒不是题目难,主要是时间限制(time limit),我改了一个错应该题就做对了,问题是搞出了超时,害得我改了一个小时这道题……

6月3号的日常挑战是304. Range Sum Query 2D - Immutable(medium)。

简单来说就是,给一个矩阵,画一个范围(给左上角和右下角的坐标),然后求范围内的数据和。

首先是我没太读懂题,我还以为它是要先把输入矩阵存入到class里,然后再进行计算,后来看了别人的回答,大彻大悟了属于是,这个class就是用来进行矩阵范围内求和计算的,不是用来存矩阵的,只要能算,存什么都行……

一开始,我就是存了一下矩阵,然后直接2个for loop套一起,过一遍求和范围,结果它说超时了。我就差9个test case我就都过了呀,给我说超时了……

为了提高速度,考虑的是减少for loop,我参考的答案,它算了个prefix sum matrix,在计算的时候是真的一个for loop都不用,但是我觉得它那个计算方法也挺麻烦的,所以我还是选择有1个for loop。我的prefix sum matrix,列没有改变,但每行中,每个元素都是此前元素之和。其实就是6月1号我做的那个一维求和数列的题。然后,只要用matrix[行数][右下角坐标列数] - matrix[行数][左上角坐标列数 - 1](因为每个数都是原矩阵中此列之前的元素之和,而求和范围是包含了这个数字本身的,所以要列数 - 1),就可以得出范围内一行元素的和,在用for loop过一下范围内的所有行,就好了。

有一个edge case:左上角坐标列数为0。我卡了这个很久,最后用if else判断解决了,如果左上角坐标列数为0,说明我们需要的就是这行所有元素的和,不要减就好了。

最后代码跑得也是挺狼狈的,贼慢,但是少于时间限制了,而且我感觉相对来说,我这个解也比较好理解。

这是我最后的答案。


​​​​​​​

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值