📌  相关文章
📜  在给定的整数序列中找到L到R范围内的总和

📅  最后修改于: 2021-04-29 01:18:42             🧑  作者: Mango

给定一个整数的数组arr []和以下形式的序列:

还给定两个整数L和R使得0 \le L \le R \le 10^{6} 。任务是找到从L到R的给定范围内所有数字的总和。

例子:

Input : L = 0, R = 5
Output : 19
Explanation : 
The arr[] is {2, 3, 0, 1, 6, 7}.
sum = arr[0] + arr[1] + arr[2] + arr[3] + arr[4] + arr[5]
sum = 2 + 3 + 0 + 1 + 6 + 7
Hence, the sum is 19.

Input : L = 2, R = 5
Output : 14
Explanation : 
The arr[] is {0, 1, 6, 7}.
sum = arr[2] + arr[3] + arr[4] + arr[5] 
sum = 0 + 1 + 6 + 7
Hence, the sum is 14.

方法:

为了解决上面提到的问题,我们首先必须观察数组的序列并了解它是如何生成的。给定的数组是由[0、1、2、3、4、5、6,…]的整数序列生成的。最初,我们在前两个整数中加上2 ,然后从后两个整数中减去2 ,然后继续。因此,我们新形成的数组看起来像[0 + 2,1 + 2,2-2,3-2,4 + 2,5 + 2,6-2,7-2,…]。因此,我们生成了这个新的整数序列,直到R并将其存储在数组中。最后,计算从L到R范围内的索引的总和,然后将其返回。

下面是上述方法的实现:

C++
// C++ program to find the
// sum in given range L to R
  
#include  
using namespace std;
  
// Function to find the sum
// within the given range
int findSum(int L, int R)
{
    vector arr; 
  
    // generating array from given sequence
    int i = 0;
    int x = 2;
    while (i <= R) {
        arr.push_back(i + x);
  
        if (i + 1 <= R)
            arr.push_back(i + 1 + x);
  
        x *= -1;
  
        i += 2;
    }
  
    // calculate the desired sum
    int sum = 0;
  
    for (int i = L; i <= R; ++i)
  
        sum += arr[i];
  
    // return the sum
    return sum;
}
  
// Driven code
int main()
{
  
    // initialise the range
    int L = 0, R = 5;
  
    cout << findSum(L, R);
  
    return 0;
}


Java
// Java program to find the
// sum in given range L to R
import java.util.*;
  
class GFG{
      
// Function to find the sum
// within the given range
public static int findSum(int L, int R)
{
    ArrayList arr = new ArrayList<>(); 
  
    // Generating array from given sequence
    int i = 0;
    int x = 2;
    while (i <= R)
    {
        arr.add(i + x);
  
        if (i + 1 <= R)
            arr.add(i + 1 + x);
  
        x *= -1;
  
        i += 2;
    }
  
    // Calculate the desired sum
    int sum = 0;
  
    for(i = L; i <= R; ++i)
       sum += arr.get(i);
  
    // return the sum
    return sum;
}
  
// Driver code
public static void main(String[] args)
{
      
    // Initialise the range
    int L = 0, R = 5;
  
    System.out.println(findSum(L, R));
}
}
  
// This code is contributed by jrishabh99


Python3
# Python3 program to find the 
# sum in given range L to R 
  
# Function to find the sum 
# within the given range 
def findSum(L, R) : 
    arr = []
  
    # generating array from given sequence 
    i = 0
    x = 2
    k = 0
    while (i <= R) :
        arr.insert(k, i + x) 
        k += 1
        if (i + 1 <= R) :
            arr.insert(k, i + 1 + x)
        k += 1
        x *= -1
        i += 2
  
    # calculate the desired sum 
    sum = 0
  
    for i in range(L, R + 1) :
        sum += arr[i]
  
    # return the sum 
    return sum
  
# Driver code 
  
# initialise the range 
L = 0
R = 5
print(findSum(L, R))
  
# This code is contributed by Sanjit_Prasad


C#
// C# program to find the
// sum in given range L to R
using System;
using System.Collections;
  
class GFG{
      
// Function to find the sum
// within the given range
public static int findSum(int L, int R)
{
    ArrayList arr = new ArrayList(); 
  
    // Generating array from given sequence
    int i = 0;
    int x = 2;
    while (i <= R)
    {
        arr.Add(i + x);
  
        if (i + 1 <= R)
            arr.Add(i + 1 + x);
  
        x *= -1;
        i += 2;
    }
  
    // Calculate the desired sum
    int sum = 0;
  
    for(i = L; i <= R; ++i)
        sum += (int)arr[i];
  
    // return the sum
    return sum;
}
  
// Driver code
public static void Main(string[] args)
{
      
    // Initialise the range
    int L = 0, R = 5;
  
    Console.Write(findSum(L, R));
}
}
  
// This code is contributed by rutvik_56


输出:
19

时间复杂度: O(N)