重新排列數組,以使偶數索引元素較小而奇數索引元素較大


難度級別 容易獎學金
經常問 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)空間。