zoukankan      html  css  js  c++  java
  • leetcode 303. Range Sum Query

    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) -> 1
    sumRange(2, 5) -> -1
    sumRange(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],直接计算。

     1 class NumArray {
     2 private:
     3     vector<int> sum;
     4 public:
     5     NumArray(vector<int>& nums) {
     6         sum = nums;
     7     }
     8     
     9     int sumRange(int i, int j) {
    10         int ans = 0;
    11         for (int k = i; k <= j; ++k) {
    12             ans += sum[k];
    13         }
    14         return ans;
    15     }
    16 };

    思路二:

    sum[k] 记录 [0,k]的累加和,计算下标[i, j]的元素和为sum[j] - sum[i - 1], k = 0时,sum[0] = nums[0];

     1 class NumArray {
     2 private:
     3     vector<int> sum;
     4 public:
     5     NumArray(vector<int>& nums) {
     6         sum.assign(nums.begin(), nums.end());
     7         for (int i = 1; i < nums.size(); ++i) {
     8             sum[i] = sum[i - 1] + nums[i];
     9         }
    10     }
    11     
    12     int sumRange(int i, int j) {
    13         if (i == 0) return sum[j];
    14         return sum[j] - sum[i - 1];
    15     }
    16 };

     python3:

     1 class NumArray:
     2     def __init__(self, nums: List[int]):
     3         self.lists = [] #定义实例变量
     4         for i, v in enumerate(nums):
     5             if i == 0:
     6                 self.lists.append(v)
     7             else:
     8                 self.lists.append(self.lists[-1] + v)
     9 
    10     def sumRange(self, i: int, j: int) -> int:
    11         if i == 0:
    12             return self.lists[j]
    13         return self.lists[j] - self.lists[i - 1]

    class NumArray:    def __init__(self, nums: List[int]):        self.lists = []        for i, v in enumerate(nums):            if i == 0:                self.lists.append(v)            else:                self.lists.append(self.lists[i-1] + v)
        def sumRange(self, i: int, j: int) -> int:        if i == 0:            return self.lists[j]        return self.lists[j] - self.lists[i - 1]

  • 相关阅读:
    TC SRM 591 (Div2. Practice only)
    SDL2 简单实现图片缩放移动查看
    Linux下socket编程 address already in use 问题
    POJ 2155 二维树状数组
    OJ开发笔记(1)
    开通博客啦~
    [转]STL transform算法中使用toupper函数
    Monkey and Banana HDU 1069
    Ignatius and the Princess IV HDU 1029
    Dungeon Master POJ 2251
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/12160087.html
Copyright © 2011-2022 走看看