首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 基礎練習 10:數組循環右移 m 位

     編輯:Java 綜合教學

Java 基礎練習 10:數組循環右移 m 位

本練習要求實現一個數組的循環右移操作:給定一個包含 n 個整數的數組,將其前面的元素順序向後移動 m 個位置,最後的 m 個元素移至數組最前面。

代碼實現

import java.util.Scanner;

public class Tenth {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("您將輸入的數字個數為:");
        int n = input.nextInt();
        int[] array = new int[n];

        System.out.println("您要交換的數字個數為:");
        int m = input.nextInt();

        System.out.println("請輸入數組:");
        for (int i = 0; i < n; i++) {
            array[i] = input.nextInt();
        }

        System.out.println("交換之前數組為:");
        for (int val : array) {
            System.out.print(val + " ");
        }

        // 核心邏輯:將前 m 個元素與後 m 個元素交換
        for (int i = 0; i < m; i++) {
            int temp = array[i];
            array[i] = array[array.length - m + i];
            array[array.length - m + i] = temp;
        }

        System.out.println("\n交換之後數組為:");
        for (int val : array) {
            System.out.print(val + " ");
        }
    }
}

邏輯分析

此實現採用「首尾交換」策略:

  1. 讀取數組長度 n 和移動位數 m。
  2. 遍歷前 m 個元素(索引 0 到 m-1)。
  3. 將每個元素與對應的「最後 m 個元素」中的對應位置元素交換(索引 n-m+i)。

注意:此方法僅在 m <= n/2 時正確實現「循環右移」。若 m > n/2,交換邏輯會導致數據錯誤。更通用的循環右移算法通常採用「三步反轉法」或模運算索引映射。

改進建議

// 通用循環右移(三步反轉法)
public static void rotateRight(int[] arr, int m) {
    m = m % arr.length;
    if (m < 0) m += arr.length;
    reverse(arr, 0, arr.length - 1);
    reverse(arr, 0, m - 1);
    reverse(arr, m, arr.length - 1);
}

private static void reverse(int[] arr, int start, int end) {
    while (start < end) {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}

該方法時間複雜度 O(n),空間複雜度 O(1),適用於任意 m 值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved