给定一个由N个整数组成的数组。任务是消除元素的数量,以使得在结果数组中,任意两个相邻值的乘积是偶数。
例子:
Input : arr[] = {1, 2, 3}
Output : 0
Input : arr[] = {1, 3, 5, 4, 2}
Output : 2
Remove 1 and 3.
方法: 2个数字的乘积是偶数,即使其中任何一个是偶数。这意味着对于每对连续的数字,如果两个都是奇数,则消除其中一个。
因此,为使相邻元素的乘积均匀,所有元素应为偶数或替代的奇偶元素。因此,以下贪婪算法起作用:
- 按顺序浏览所有元素。
- 如果所有元素均是偶数,则返回“ 0”。
- 如果所有元素都是奇数,则返回“ n”。
- 否则,计算连续奇数对的数量。
- 返回最小计数。
以下是Python实现–
Python3
# Python 3 implementation of the
# above approach
# Function to find minimum number of
# eliminations such that product of all
# adjacent elements is even
def min_elimination(n, arr):
countOdd = 0
counteven = 0
# Stores the new value
for i in range(n):
# Count odd and even numbers
if (arr[i] % 2):
countOdd += 1
else:
counteven+= 1
# if all are even
if counteven == n:
return 0
# if all are odd
if countOdd == n:
return n
else:
countpair = 0
for i in range(1, n):
if (arr[i] % 2 == 1 and arr[i-1] % 2 == 1):
countpair+= 1
return countpair
# Driver code
if __name__ == '__main__':
arr = [1, 2, 3, 7, 9]
n = len(arr)
print(min_elimination(n, arr))
输出:
2
时间复杂度: O(N)
辅助空间: O(N)