303. 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变
给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j两点。
实现 NumArray 类:
NumArray(int[] nums)使用数组nums初始化对象int sumRange(int i, int j)返回数组nums从索引i到j(i ≤ j)范围内元素的总和,包含i、j两点(也就是sum(nums[i], nums[i + 1], ... , nums[j]))
示例:
1 | 输入: |
前缀和概念的首次应用,在求连续元素的和的情况下尤其好用
Solution
题目要求是返回一个数组间从下标i到下标j元素之间的和,如果采用暴力算法,循环计算,由于每次检索的时间和检索的下标范围有关,因此时间复杂度较高
所以能实现计算出前缀和,那么可以将时间复杂度降低到O(1)
具体实现方面,假设数组 nums 的长度为 n,创建长度为 n+1 的前缀和数组sums,对于0≤i<n都有sums[i+1]=sums[i]+nums[i],sums[i]表示数组nums从下标0到下标i-1的前缀和
前缀和计算方法:sumRrage(i,j)=sums[j+1]-nums[i]
1 | class NumArray { |





