• 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
  • 相关阅读:
    关于《函数调用关键字》记忆恢复本
    进程一
    PE工具实现
    PE工具界面一
    PE各种操作
    汇编指令repne scas byte ptr es:[edi]
    Dialog
    按钮
    点和线的绘制一
    滚动条二
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/13645080.html
Copyright © 2020-2023  润新知