Encuentre la suma en el rango L a R en una secuencia dada de enteros

Dada una array arr[] de enteros y una secuencia de la forma: 
 

[ 2, 3, 0, 1, 6, 7, 4, 5, … ]
 

También dados dos enteros L y R tales que  0 \le L \le R \le 10^{6}   . La tarea es encontrar la suma de todos los números en el rango dado de L a R.
Ejemplos: 
 

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.

Enfoque: 
para resolver la pregunta mencionada anteriormente, primero debemos observar la secuencia de la array y comprender cómo se genera. La array dada se genera a partir de una secuencia de números enteros que es [0, 1, 2, 3, 4, 5, 6, …]. Inicialmente sumamos 2 a los primeros dos enteros , luego restamos 2 de los siguientes dos enteros y esto continúa. Así que nuestra array recién formada se parece a [ 0+2, 1+2, 2-2, 3-2, 4+2, 5+2, 6-2, 7-2, … ]. Por lo tanto, generamos esta nueva secuencia de enteros hasta R y la almacenamos en una array. Finalmente, calcule la suma de los índices en el rango L a R y devuélvalo.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ program to find the
// sum in given range L to R
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the sum
// within the given range
int findSum(int L, int R)
{
    vector<int> 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<Integer> 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

Javascript

<script>
//Javascript  program to find the
// sum in given range L to R
 
// Function to find the sum
// within the given range
function findSum( L,  R)
{
    var arr=[];
 
    // generating array from given sequence
    var i = 0;
    var x = 2;
    while (i <= R) {
        arr.push(i + x);
 
        if (i + 1 <= R)
            arr.push(i + 1 + x);
 
        x *= -1;
 
        i += 2;
    }
 
    // calculate the desired sum
    var sum = 0;
 
    for (var i = L; i <= R; ++i)
 
        sum += arr[i];
 
    // return the sum
    return sum;
}
 
 
 
var L = 0, R = 5;
document.write( findSum(L, R));
 
 
//This code is contributed by SoumikMondal
</script>
Producción: 

19

 

Complejidad de tiempo : O(N)

Espacio Auxiliar: O(N)
 

Publicación traducida automáticamente

Artículo escrito por Sanjit_Prasad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *