📌  相关文章
📜  Python3程序通过逆时针旋转数字将数组元素重新排列为交替的奇偶序列

📅  最后修改于: 2022-05-13 01:55:36.776000             🧑  作者: Mango

Python3程序通过逆时针旋转数字将数组元素重新排列为交替的奇偶序列

给定一个由N个正整数组成的数组arr[] ,任务是逆时针旋转数组元素的数字,使得数组元素的元素交替出现奇偶或奇偶形式。如果存在多个解决方案,则打印其中任何一个。否则,打印-1

例子:

方法:上述问题可以通过将第一个数组元素修改为奇数或偶数来解决。可以通过将数字转换为字符串,然后根据需要将字符串字符旋转来修改数组元素。请按照以下步骤解决问题:

  • 将第一个数组元素重新排列为偶数,并检查剩余的数组元素是否可以交替排列为奇偶数。如果发现为真,则将数组元素重新排列为奇偶交替并打印数组元素。
  • 否则,将第一个数组元素重新排列为奇数,并检查剩余的数组元素是否可以重新排列为奇偶交替。如果发现为真,则将剩余的数组元素重新排列为奇偶交替并打印数组元素。
  • 否则,打印-1

下面是上述方法的实现:

Python3
# Python program of the above approach
  
# Utility function to rotate the digits of 
# array elements such that array elements are
# in placed even-odd or odd-even alternately
def is_possible(arr, check):
  
    # Checks if array can be converted 
    # into even-odd or odd-even form
    exists = True
  
    # Store array elements
    cpy = arr
  
    # Traverse the array
    for i in range(len(arr)):
  
        # Check if arr[i] is already
        # at correct position 
        if (arr[i] % 2 == check):
            check = not(check)
            continue
  
        # Checks if it is possible
        # to modify the number arr[i]
        # by rotating the digits of
        # the number anticlockwise
        flag = False
  
        # Stores the number arr[i] as
        # string
        strEle = str(arr[i])
  
        # Traverse over the digits of
        # the current element
        for j in range(len(strEle)):
  
            # Checks if parity of check and
            # current digit is same or not
            if int(strEle[j]) % 2 == check:
  
                # Rotates the string by j + 1 times
                # in anticlockwise
                arr[i] = int(strEle[j + 1:] + strEle[:j + 1])
  
                # Marks the flag
                # as true and break
                flag = True
                break
  
        # If flag is false
        if flag == False:
  
            # Update exists
            exists = False
            break
  
        # Changes the
        # parity of check
        check = not(check)
  
    # Checks if arr[] cannot be
    # modified, then returns false
    if not exists:
        arr = cpy
        return False
          
          
    # Otherwise, return True
    else:
        return True
  
# Function to rotate the digits of array
# elements such that array elements are
# in the form of even-odd or odd-even form
def convert_arr(arr):
  
    # If array elements can be arranged
    # in even-odd manner alternately
    if(is_possible(arr, 0)):
        print(*arr)
  
    # If array elements can be arranged
    # in odd-even manner alternately
    elif(is_possible(arr, 1)):
        print(*arr)
          
    # Otherwise, prints -1
    else:
        print(-1)
  
# Driver Code
if __name__ == '__main__':
      
    arr = [143, 251, 534, 232, 854]
    convert_arr(arr)
  
    # This code is contributed by ipg2016107.


输出:
314 251 534 223 854

时间复杂度: O(N)
辅助空间: O(N)

有关详细信息,请参阅有关通过逆时针旋转数字将数组元素重新排列为交替奇偶序列的完整文章!