偶数のインデックス要素が小さく、奇数のインデックス要素が大きくなるように配列を再配置します


難易度 簡単に
よく聞かれる 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未満の0つを取ります。 したがって、比較のためにその場所を離れる必要があります。そうしないと、エラーが発生します。 n未満になるまでループすると、配列に存在しないインデックスにヒットします。 そのため、1からn –XNUMX未満のトラバーサルを実行しました。

配列をトラバースし、「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) where 「n」 配列内の要素の数です。 配列をトラバースして要素を交換したので、時間計算量は線形です。

スペースの複雑さ

O(1) 定数スペースを使用しましたが、プログラム全体でO(n)スペースを使用するためです。