📌  相关文章
📜  以和为两个数字的平方差来计算子数组

📅  最后修改于: 2021-05-17 18:33:35             🧑  作者: Mango

给定一个数组arr [] ,任务是计算所有子数组,其总和可以表示为任意两个数字的平方差。

例子:

方法:这个想法是利用一个事实,即奇数或被4整除的数字只能表示为2个数字的平方差。下面是步骤说明:

  • 运行嵌套循环并检查每个子数组是否可以将sum写入两个数字的平方差。
  • 如果任何子数组的总和可以表示为两个数字的平方之差,则将这些子数组的计数增加1

下面是上述方法的实现:

C++
// C++ implementation  to count the
// subarray which can be represented
// as the difference of two square 
// of two numbers
  
#include 
  
using namespace std;
#define ll long long
  
// Function to count sub-arrays whose
// sum can be represented as difference
// of squares of 2 numbers
int countSubarray(int* arr, int n)
{
    int count = 0;
    for (int i = 0; i < n; i++) {
  
        // Count the elements that 
        // are odd and divisible by 4
        if (arr[i] % 2 != 0 || arr[i] % 4 == 0)
            count++;
          
        // Declare a variable to store sum
        ll sum = arr[i];
        for (int j = i + 1; j < n; j++) {
              
            // Calculate sum of 
            // current subarray
            sum += arr[j];
            if (sum % 2 != 0 || sum % 4 == 0)
                count++;
        }
    }
    return count;
}
  
// Driver Code
int main()
{
    int arr[] = { 2, 1, 3, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << countSubarray(arr, n) << endl;
    return 0;
}


Java
// Java implementation  to count the
// subarray which can be represented
// as the difference of two square 
// of two numbers
  
import java.util.*;
  
class GFG {
  
    // Function to count sub-arrays whose
    // sum can be represented as difference
    // of squares of 2 numbers
    static int countSubarray(int[] arr, int n)
    {
        int count = 0;
        for (int i = 0; i < n; i++) {
  
            // Count the elements that 
            // are odd and divisible by 4
            if (arr[i] % 2 != 0 || arr[i] % 4 == 0)
                count++;
  
            // Declare a variable to store sum
            long sum = arr[i];
            for (int j = i + 1; j < n; j++) {
  
                // Calculate sum of 
                // current subarray
                sum += arr[j];
                if (sum % 2 != 0 || sum % 4 == 0)
                    count++;
            }
        }
        return count;
    }
  
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 2, 1, 3, 7 };
        int n = arr.length;
        System.out.println(countSubarray(arr, n));
    }
}


Python 3
# Python implementation to 
# count the sub-arrays whose
# sum can be reperesented as
# difference of square of two
# numbers
  
# Function to count sub-arrays whose
# sum can be represented as 
# difference of squares of 2 numbers 
def countSubarray(arr, n):
    count = 0
    for i in range(n):
  
        # Count the elements that 
        # are odd or divisible by 4
        if arr[i]% 2 != 0 or arr[i]% 4 == 0:
            count+= 1
  
        # Declare a variable to store sum
        tot = arr[i]
        for j in range(i + 1, n):
  
            # Calculate sum of 
            # current subarray
            tot+= arr[j]
            if tot % 2 != 0 or tot % 4 == 0:
                count+= 1
    return count
  
   
# Driver Code
if __name__ == "__main__":
    arr = [ 2, 1, 3, 7 ]
    n = len(arr)
    print(countSubarray(arr, n))


C#
// C# implementation  to count the
// subarray which can be represented
// as the difference of two square 
// of two numbers
using System;
  
class GFG {
  
    // Function to count sub-arrays whose
    // sum can be represented as difference
    // of squares of 2 numbers
    static int countSubarray(int[] arr, int n)
    {
        int count = 0;
        for (int i = 0; i < n; i++) {
  
            // Count the elements that 
            // are odd and divisible by 4
            if (arr[i] % 2 != 0 || arr[i] % 4 == 0)
                count++;
  
            // Declare a variable to store sum
            long sum = arr[i];
            for (int j = i + 1; j < n; j++) {
  
                // Calculate sum of 
                // current subarray
                sum += arr[j];
                if (sum % 2 != 0 || sum % 4 == 0)
                    count++;
            }
        }
        return count;
    }
  
    // Driver Code
    public static void Main()
    {
        int[] arr = { 2, 1, 3, 7 };
        int n = arr.Length;
        Console.WriteLine(countSubarray(arr, n));
    }
}


PHP


输出:
7

时间复杂度: O(N 2 )