博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-Range Sum Query - Immutable
阅读量:7060 次
发布时间:2019-06-28

本文共 1330 字,大约阅读时间需要 4 分钟。

Description:

Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.

Example:

Given nums = [-2, 0, 3, -5, 2, -1]sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3

Note:

  1. You may assume that the array does not change.
  2. There are many calls to sumRange function.

题目大意:给定一个数组和两个下标i,j,求出i和j之间的数字的和。包含i,j。

思路:这题非常简单,按照最简单的思路做,就是循环i到j求和。

实现代码:

public class NumArray {        private int[] nums;    public NumArray(int[] nums) {        this.nums = nums;    }    public int sumRange(int i, int j) {        int sum = 0;        for(int k=i; k<=j; k++) {            sum += nums[k];        }        return sum;    }}// Your NumArray object will be instantiated and called as such:// NumArray numArray = new NumArray(nums);// numArray.sumRange(0, 1);// numArray.sumRange(1, 2);

但是这样就没意思了,后台的调用方式是连续调用一个数组的sumRange方法。但是上面的解法就会有非常多的重复计算。所以还可以优化,就是在初始化的时候把所有的和都算出来,在返回的时候直接获取就行了。用sum[i]表示0~i的和,则i~j的和就是sum[j] - sum[i-1]。nums为空,i=0,等情况要特殊考虑。

实现代码:

public class NumArray {        private int[] nums;        private int[] sums;    public NumArray(int[] nums) {        if(nums != null) {            this.nums = nums;        }        else            this.nums = new int[0];        sums = new int[nums.length];        if(nums.length != 0)            sums[0] = nums[0];        for(int i=1; i

效率明显提高了。

转载地址:http://uzfll.baihongyu.com/

你可能感兴趣的文章
华三路由器配置mstp多生成树协议
查看>>
程序员最怕的四个字:通宵发布!| 程序员有话说
查看>>
没有公网IP怎样访问异地视频监控
查看>>
考试命令脚本题3
查看>>
linux中vi整理全集(基础)
查看>>
戛纳电影节百花齐放,中国明星衣着品味紧跟时尚前沿
查看>>
android服务unbind之后再想绑定问题
查看>>
python 模拟登陆51job企业中心,翻页取出所有简历
查看>>
Vulkan Tutorial 10 图形管线
查看>>
我的友情链接
查看>>
工业控制信息安全资源汇总(国内篇)
查看>>
服务器之05DHCP
查看>>
C# AES
查看>>
(转)Java web 项目中文件路径
查看>>
jquery实现下拉加载(附php数字签名规则
查看>>
Video4Linux2 part 4: inputs and outputs
查看>>
Scala中的s函数
查看>>
RESTful最佳实践
查看>>
企业网站如何备案
查看>>
Quick Outline
查看>>