给定一个整数数组 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
Javascript
输出:
19
时间复杂度: O(N)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live