重新排列数组,以使偶数索引元素较小而奇数索引元素较大


难度级别 易得奖学金
经常问 Avalara 史诗系统 风筝 Roblox 特斯拉
排列

问题陈述

您给了 排列 of 整数。 问题“重新排列数组,使偶数索引元素较小,而奇数索引元素较大”,要求重新排列数组,使偶数索引元素应小于修改后的数组中的奇数索引元素。

使用案列

arr[]={ 2,5,7,1,3,4 }
2 7 1 5 3 4

说明:2在偶数索引位置(0索引)中,因此它小于下一个奇数索引元素,1小于5在奇数索引元素上。

重新排列数组以使偶数索引的元素小于奇数索引的算法

1. Traverse the array from 0 to n-1(less than the length of the array).
2. Check if the index is even and the next element is smaller than the current element then swap both of the numbers.
3. Check if the index is odd and the next element is greater than the current element, then swap both of the numbers.
4. Print the array.

说明

给定长度为n的数组。 我们被要求以使偶数索引元素小于奇数索引元素的方式重新排列数组。 如果不满足条件,我们将通过交换元素来做到这一点。 首先,我们必须检查其类型是偶数还是奇数,然后我们必须修改 排列.

从0遍历到小于n-1的数组,其中n是数组的长度。 在遍历之前取小于n-1的值,因为我们将把它与数组中存在的下一个元素进行比较。 因此,我们必须将该位置留作比较,否则会出现错误。 如果我们循环直到小于n,则它将命中数组中不存在的索引。 这就是为什么我们进行0到小于n – 1的遍历。

我们将遍历数组并检查'i'的每个值是否为偶数或奇数,并且array [i]大于下一个元素。 这意味着下一个元素位置,因为i绝对是奇数,并且该奇数位置的元素小于偶数位置的元素。 因此,我们将交换元素,因为arr [i]是当前的偶数元素,而arr [i + 1]是下一个奇数定位的元素。

现在,我们同时检查'i'的值是否为奇数,以及此索引处的元素是否小于前一个元素,然后还要交换数组中的值。 交换所有可能的值之后,如此形成的数组将成为最终的所需输出。

重新排列数组,以使偶数索引元素较小而奇数索引元素较大

代码

C ++代码重新排列数组,以便偶数索引的元素小于奇数索引的元素

#include <iostream>
using namespace std;

void evenOddComparison (int* arr, int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        if (i % 2 == 0 && arr[i] > arr[i + 1])
            swap(arr[i], arr[i + 1]);

        if (i % 2 != 0 && arr[i] < arr[i + 1])
            swap(arr[i], arr[i + 1]);
    }
}

void printArray(int arr[], int size)
{
    for (int i = 0; i < size; i++)
        cout << arr[i] << " ";

    cout << endl;
}

int main()
{
    int arr[] = {  2,5,7,1,3,4  };
    int n = sizeof(arr) / sizeof(arr[0]);

    evenOddComparison (arr, n);

    printArray(arr, n);

    return 0;
}
2 7 1 5 3 4

Java代码重新排列数组,以便偶数索引的元素小于奇数索引的元素

class rearrangeArray
{
    public static void evenOddComparison(int arr[], int n)
    {

        int temp;
        for (int i = 0; i < n - 1; i++)
        {
            if (i % 2 == 0 && arr[i] > arr[i + 1])
            {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
            if (i % 2 != 0 && arr[i] < arr[i + 1])
            {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
    }
    public static void printArray(int arr[], int size)
    {
        for (int i = 0; i < size; i++)
            System.out.print(arr[i] + " ");

        System.out.println();
    }
    public static void main(String[] args)
    {
        int arr[] = { 2,5,7,1,3,4 };
        int n = arr.length;

        evenOddComparison (arr, n);

        printArray(arr, n);
    }
}
2 7 1 5 3 4

复杂度分析

时间复杂度

O(N) 哪里 “ n” 是数组中元素的数量。 我们刚刚遍历了数组并交换了元素,因此时间复杂度是线性的。

空间复杂度

O(1) 因为我们使用了恒定的空间,但是程序整体上占用的是O(n)空间。