📌  相关文章
📜  Python |要删除的元素数量,以使相邻元素的乘积始终为偶数

📅  最后修改于: 2021-04-29 02:50:44             🧑  作者: Mango

给定一个由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)