给定一个整数的数组arr []和以下形式的序列:
[ 2, 3, 0, 1, 6, 7, 4, 5, … ].
还给定两个整数L和R使得 。任务是找到从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)