zoukankan      html  css  js  c++  java
  • Leetcode303.区域和检索-数组不可变

    题意

    给定一个整数数组 nums,求出数组从索引 ij (ij) 范围内元素的总和,包含 i, j 两点。

    思路

    • 如果是暴力法,每次查询的时候都要遍历i-->j,进行求和,复杂度是(O(n))。题目明确说了会多次调用,所以这个暴力法是会超时的
    • 引入前缀和的思想,用sum[i]表示[0..i-1]的区间和,那么[i, j]的区间和就是sum[j+1] - sum[i],先求出前缀和数组用时(O(n)),后面每次查询的操作都是(O(1))

    代码

    class NumArray {
    public:
        vector<int> sum;
        NumArray(vector<int>& nums) {
            sum.resize(nums.size() + 1, 0);
            for(int i=0;i<nums.size();i++)
                sum[i + 1] = sum[i] + nums[i];
        }
        
        int sumRange(int i, int j) {
            return sum[j + 1] - sum[i];
        }
    };
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    247. Strobogrammatic Number II 倒过来看也一样的数
    性能测试结果分析
    性能测试文档
    性能测试技术
    性能测试流程
    JMeter(7)插件
    Java同步工具类
    线程池
    死锁
    Lock显示锁
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/13645080.html
Copyright © 2011-2022 走看看