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

    #week6

    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.

    分析:

    动态规划类型

    状态转移方程:f[i] = f[i-1] + nums[i];

    代码:

    超时版本:

     1 class NumArray {
     2 public:
     3     int** f;
     4     NumArray(vector<int> nums) {
     5         int len = nums.size();
     6         if (len > 0) {
     7         f = new int* [len];
     8         for (int i = 0; i < len; i++) f[i] = new int[len];
     9         f[0][0] = nums[0];
    10         for (int i = 0; i < len; i++)
    11             for (int j = i; j < len; j++) {
    12                 if (i == j) f[i][j] = nums[i];
    13                 else {
    14                     f[i][j] = f[i][j-1] + nums[j];
    15                 }
    16             }
    17         } else {
    18             f = new int*[1];
    19             f[0] = new int[1];
    20             f[0][0] = 0;
    21         }
    22     }
    23     
    24     int sumRange(int i, int j) {
    25         return f[i][j];
    26     }
    27 };
    28 
    29 /**
    30  * Your NumArray object will be instantiated and called as such:
    31  * NumArray obj = new NumArray(nums);
    32  * int param_1 = obj.sumRange(i,j);
    33  */

    修改为一维,不超时:

     1 class NumArray {
     2 public:
     3     int* f;
     4     NumArray(vector<int> nums) {
     5         int len = nums.size();
     6         if (len > 0) {
     7             f = new int [len];
     8             f[0] = nums[0];
     9             for (int i = 1; i < len; i++)
    10                 f[i] = f[i-1] + nums[i];
    11         } else {
    12             f = new int[1];
    13             f[0] = 0;
    14         }
    15     }
    16     
    17     int sumRange(int i, int j) {
    18         return f[j] - f[i-1];
    19     }
    20 };
    21 
    22 /**
    23  * Your NumArray object will be instantiated and called as such:
    24  * NumArray obj = new NumArray(nums);
    25  * int param_1 = obj.sumRange(i,j);
    26  */
  • 相关阅读:
    SpringBoot前端模板
    Http协议与TCP协议简单理解
    Kafka简介、基本原理、执行流程与使用场景
    初学Kafka工作原理流程介绍
    Redis数据持久化、数据备份、数据的故障恢复
    zookeeper的分布式锁
    eclipse下将maven项目打包为jar(1.不带第三方jar,2.带第三方jar)
    Redis入门篇(安装与启动)
    java操作Redis缓存设置过期时间
    java单例模式实现
  • 原文地址:https://www.cnblogs.com/iamxiaoyubei/p/8278221.html
Copyright © 2011-2022 走看看