给定一个非零整数数组A ,任务是找到(l, r)对的数量,其中 (l <= r) 使得A[l]*A[l+1]*A[l+2 ]….A[r]为正。
例子:
Input: A = {5, -3, 3, -1, 1}
Output: 7
Explanation:
First pair, (1, 1) = 5 is positive
Second pair, (3, 3) = 3 is positive
Third pair, (1, 4) = 5 * -3 * 3 * -1 = 45 is positive
Forth pair, (2, 4) = -3 * 3 * -1 = 9 is positive
Fifth pair, (1, 5) = 5 * -3 * 3 * -1 * 1 = 45 is positive
Sixth pair, (2, 5) = -3 * 3 * -1 * 1 = 9 is positive
Seventh pair, (5, 5) = 1 is positive
So, there are seven pairs with positive product.
Input: A = {4, 2, -4, 3, 1, 2, -4, 3, 2, 3}
Output: 27
方法:
这个想法是检查每个数组元素可能的数字对。
- 遍历数组,对数组中的每个元素执行以下步骤。
- 跟踪在它们之前具有偶数个负元素的元素的数量(作为 even_count)和在它们之前具有奇数个负元素的元素数量(作为odd_count) 。
- 将负元素的总数存储到现在(作为 total_count) 。
- 如果total_count是偶数,则将even_count添加到答案中。否则添加odd_count 。
下面是上述方法的实现:
C++
// C++ Program to find the
// count of index pairs
// in the array positive
// range product
#include
using namespace std;
void positiveProduct(int arr[], int n)
{
int even_count = 0;
int odd_count = 0;
int total_count = 0;
int ans = 0;
for (int i = 0; i < n; i++) {
// Condition if number of
// negative elements is even
// then increase even_count
if (total_count % 2 == 0)
even_count++;
// Otherwise increase odd_count
else
odd_count++;
// Condition if current element
// is negative
if (arr[i] < 0)
total_count++;
// Condition if number of
// negative elements is even
// then add even_count
// in answer
if (total_count % 2 == 0)
ans += even_count;
// Otherwise add odd_count
// in answer
else
ans += odd_count;
}
cout << ans << "\n";
}
// Driver Code
int main()
{
int A[] = { 5, -3, 3, -1, 1 };
int size = sizeof(A) / sizeof(A[0]);
positiveProduct(A, size);
return 0;
}
Java
// Java program to find the count of
// index pairs in the array positive
// range product
class GFG{
public static void positiveProduct(int arr[],
int n)
{
int even_count = 0;
int odd_count = 0;
int total_count = 0;
int ans = 0;
for(int i = 0; i < n; i++)
{
// Condition if number of
// negative elements is even
// then increase even_count
if (total_count % 2 == 0)
{
even_count++;
}
// Otherwise increase odd_count
else
{
odd_count++;
}
// Condition if current element
// is negative
if (arr[i] < 0)
{
total_count++;
}
// Condition if number of
// negative elements is even
// then add even_count
// in answer
if (total_count % 2 == 0)
ans += even_count;
// Otherwise add odd_count
// in answer
else
ans += odd_count;
}
System.out.println(ans);
}
// Driver Code
public static void main(String[] args)
{
int A[] = { 5, -3, 3, -1, 1 };
int size = A.length;
positiveProduct(A, size);
}
}
// This code is contributed by divyeshrabadiya07
Python3
# Python3 program to find the count
# of index pairs in the array
# positive range product
def positiveProduct(arr, n):
even_count = 0
odd_count = 0
total_count = 0
ans = 0
for i in range(n):
# Condition if number of
# negative elements is even
# then increase even_count
if(total_count % 2 == 0):
even_count += 1
# Otherwise increase odd_count
else:
odd_count += 1
# Condition if current element
# is negative
if(arr[i] < 0):
total_count += 1
# Condition if number of
# negative elements is even
# then add even_count
# in answer
if(total_count % 2 == 0):
ans += even_count
# Otherwise add odd_count
# in answer
else:
ans += odd_count
print(ans)
# Driver Code
if __name__ == '__main__':
A = [ 5, -3, 3, -1, 1 ]
size = len(A)
positiveProduct(A, size)
# This code is contributed by Shivam Singh
C#
// C# program to find the count of
// index pairs in the array positive
// range product
using System;
class GFG{
public static void positiveProduct(int []arr,
int n)
{
int even_count = 0;
int odd_count = 0;
int total_count = 0;
int ans = 0;
for(int i = 0; i < n; i++)
{
// Condition if number of
// negative elements is even
// then increase even_count
if (total_count % 2 == 0)
{
even_count++;
}
// Otherwise increase odd_count
else
{
odd_count++;
}
// Condition if current element
// is negative
if (arr[i] < 0)
{
total_count++;
}
// Condition if number of
// negative elements is even
// then add even_count
// in answer
if (total_count % 2 == 0)
ans += even_count;
// Otherwise add odd_count
// in answer
else
ans += odd_count;
}
Console.WriteLine(ans);
}
// Driver Code
public static void Main(String[] args)
{
int []A = { 5, -3, 3, -1, 1 };
int size = A.Length;
positiveProduct(A, size);
}
}
// This code is contributed by 29AjayKumar
Javascript
7
时间复杂度: O(N)
空间复杂度: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live