C++程序 通过数字逆时针旋转将数组元素重新排列成交替的偶数-奇数序列
给定一个由 N 个正整数组成的数组 arr[] ,任务是将数组元素的数字逆时针旋转,使数组元素以交替的偶数-奇数或奇数-偶数形式排列。如果存在多个解决方案,则打印其中任何一个。否则,打印 -1 。
示例:
输入: arr[] = { 143, 251, 534, 232, 854 }
输出: 143 512 345 232 485
解释:
将arr[1]逆时针旋转1次会将arr[1]修改为512。
将arr[2]逆时针旋转1次会将arr[2]修改为345。
将arr[4]逆时针旋转2次会将arr[4]修改为485。
输入: arr[] = { 44, 23, 21, 33, 14 }
输出: 44 23 12 33 14
方法: 上述问题可以通过将第一个数组元素修改为奇数或偶数来解决。可以通过将数字转换为字符串,然后根据需要向左旋转字符串的字符来修改数组元素。按照以下步骤解决问题:
- 将第一个数组元素重新排列为偶数,并检查剩余的数组元素是否可以交替重新排列为奇偶数。如果找到true,则重新排列数组元素为奇偶数并打印数组元素。
- 否则,将第一个数组元素重新排列为奇数,并检查剩余的数组元素是否可以交替重新排列为偶奇数。如果找到true,则将剩余的数组元素重新排列为偶奇数,并打印数组元素。
- 否则,打印 -1 。
以下是上述方法的实现:
输出:
时间复杂度 :O(N),因为我们使用循环遍历了N次。
辅助空间 :O(N),因为我们使用额外的空间用于cpy。