最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Java解決數(shù)組旋轉(zhuǎn)問(wèn)題的方法詳解

 更新時(shí)間:2026年03月20日 08:32:00   作者:牛肉胡辣湯  
給定一個(gè)包含n個(gè)整數(shù)的數(shù)組,要求將數(shù)組中的元素向前移動(dòng)m個(gè)位置,即數(shù)組的前n-m個(gè)元素順序向后移動(dòng)m個(gè)位置,最后m個(gè)元素移動(dòng)到數(shù)組的最前面,本文給大家介紹了如何使用Java解決數(shù)組旋轉(zhuǎn)問(wèn)題,需要的朋友可以參考下

問(wèn)題描述

給定一個(gè)包含n個(gè)整數(shù)的數(shù)組,要求將數(shù)組中的元素向前移動(dòng)m個(gè)位置,即數(shù)組的前n-m個(gè)元素順序向后移動(dòng)m個(gè)位置,最后m個(gè)元素移動(dòng)到數(shù)組的最前面。例如,給定數(shù)組??[1, 2, 3, 4, 5]??和m=2,則數(shù)組變?yōu)??[4, 5, 1, 2, 3]??。

解決方案

方法一:使用額外數(shù)組

最直觀的方法是使用一個(gè)額外的數(shù)組來(lái)存儲(chǔ)旋轉(zhuǎn)后的結(jié)果,然后將結(jié)果復(fù)制回原數(shù)組。這種方法簡(jiǎn)單易懂,但需要額外的空間。

Java代碼實(shí)現(xiàn)

public class ArrayRotate {
    public static void rotate(int[] nums, int m) {
        if (nums == null || nums.length == 0) return;
        int n = nums.length;
        m %= n; // 處理m大于n的情況
        if (m == 0) return;

        int[] temp = new int[m];
        System.arraycopy(nums, n - m, temp, 0, m); // 復(fù)制最后m個(gè)元素到臨時(shí)數(shù)組
        System.arraycopy(nums, 0, nums, m, n - m); // 將前n-m個(gè)元素向后移動(dòng)m個(gè)位置
        System.arraycopy(temp, 0, nums, 0, m); // 將臨時(shí)數(shù)組的內(nèi)容復(fù)制到數(shù)組的最前面
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        int m = 2;
        rotate(nums, m);
        for (int num : nums) {
            System.out.print(num + " ");
        }
    }
}

方法二:反轉(zhuǎn)數(shù)組

更高效的方法是通過(guò)反轉(zhuǎn)數(shù)組來(lái)實(shí)現(xiàn)旋轉(zhuǎn)。具體步驟如下:

  1. 反轉(zhuǎn)整個(gè)數(shù)組。
  2. 反轉(zhuǎn)前m個(gè)元素。
  3. 反轉(zhuǎn)剩余的n-m個(gè)元素。

這種方法不需要額外的空間,并且時(shí)間復(fù)雜度為O(n)。

Java代碼實(shí)現(xiàn)

public class ArrayRotate {
    public static void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }

    public static void rotate(int[] nums, int m) {
        if (nums == null || nums.length == 0) return;
        int n = nums.length;
        m %= n; // 處理m大于n的情況
        if (m == 0) return;

        reverse(nums, 0, n - 1); // 反轉(zhuǎn)整個(gè)數(shù)組
        reverse(nums, 0, m - 1); // 反轉(zhuǎn)前m個(gè)元素
        reverse(nums, m, n - 1); // 反轉(zhuǎn)剩余的n-m個(gè)元素
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        int m = 2;
        rotate(nums, m);
        for (int num : nums) {
            System.out.print(num + " ");
        }
    }
}

這個(gè)問(wèn)題可以通過(guò)多種方式解決,這里我將提供一個(gè)使用Java實(shí)現(xiàn)的示例代碼。這個(gè)例子中,我們將使用數(shù)組來(lái)存儲(chǔ)這些整數(shù),并通過(guò)循環(huán)和臨時(shí)數(shù)組來(lái)實(shí)現(xiàn)數(shù)組元素的旋轉(zhuǎn)。

問(wèn)題描述

給定一個(gè)包含 ??n?? 個(gè)整數(shù)的數(shù)組 ??arr?? 和一個(gè)整數(shù) ??m??,我們需要將數(shù)組中的前 ??n-m?? 個(gè)元素向后移動(dòng) ??m?? 個(gè)位置,最后 ??m?? 個(gè)元素移動(dòng)到數(shù)組的最前面。

示例

假設(shè)我們有一個(gè)數(shù)組 ??arr = [1, 2, 3, 4, 5]?? 和 ??m = 2??,那么經(jīng)過(guò)操作后,數(shù)組應(yīng)該變?yōu)???[4, 5, 1, 2, 3]??。

Java 實(shí)現(xiàn)

public class ArrayRotation {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int m = 2;
        
        // 調(diào)用旋轉(zhuǎn)方法
        rotateArray(arr, m);
        
        // 打印旋轉(zhuǎn)后的數(shù)組
        System.out.println("Rotated array:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }

    public static void rotateArray(int[] arr, int m) {
        int n = arr.length;
        if (n == 0 || m % n == 0) {
            return; // 如果數(shù)組為空或m是n的倍數(shù),不需要旋轉(zhuǎn)
        }

        m = m % n; // 處理m大于n的情況

        // 使用臨時(shí)數(shù)組來(lái)存儲(chǔ)最后m個(gè)元素
        int[] temp = new int[m];
        for (int i = 0; i < m; i++) {
            temp[i] = arr[n - m + i];
        }

        // 將前n-m個(gè)元素向后移動(dòng)m個(gè)位置
        for (int i = n - m - 1; i >= 0; i--) {
            arr[i + m] = arr[i];
        }

        // 將臨時(shí)數(shù)組中的元素放到數(shù)組的最前面
        for (int i = 0; i < m; i++) {
            arr[i] = temp[i];
        }
    }
}

代碼解釋

  1. 主方法 (main):
  • 定義一個(gè)數(shù)組 ??arr?? 和一個(gè)整數(shù) ??m??。
  • 調(diào)用 ??rotateArray?? 方法進(jìn)行數(shù)組旋轉(zhuǎn)。
  • 打印旋轉(zhuǎn)后的數(shù)組。
  1. 旋轉(zhuǎn)方法 (rotateArray):
  • 獲取數(shù)組的長(zhǎng)度 ??n??。
  • 檢查特殊情況:如果數(shù)組為空或 ??m?? 是 ??n?? 的倍數(shù),則直接返回。
  • 計(jì)算 ??m % n?? 以處理 ??m?? 大于 ??n?? 的情況。
  • 使用一個(gè)臨時(shí)數(shù)組 ??temp?? 來(lái)存儲(chǔ)數(shù)組的最后 ??m?? 個(gè)元素。
  • 將數(shù)組的前 ??n-m?? 個(gè)元素向后移動(dòng) ??m?? 個(gè)位置。
  • 將臨時(shí)數(shù)組 ??temp?? 中的元素放到數(shù)組的最前面。

運(yùn)行結(jié)果

對(duì)于輸入數(shù)組 ??[1, 2, 3, 4, 5]?? 和 ??m = 2??,輸出將是:

Rotated array:
4 5 1 2 3

這個(gè)問(wèn)題可以通過(guò)多種方法來(lái)解決,但這里我將介紹一種比較直觀且效率較高的方法:通過(guò)三次反轉(zhuǎn)數(shù)組來(lái)實(shí)現(xiàn)。

問(wèn)題描述

給定一個(gè)整數(shù)數(shù)組 ??nums?? 和一個(gè)非負(fù)整數(shù) ??m??,要求將數(shù)組的前 ??n-m?? 個(gè)元素向后移動(dòng) ??m?? 個(gè)位置,最后 ??m?? 個(gè)元素移到數(shù)組的最前面。

解決方案

  1. 反轉(zhuǎn)整個(gè)數(shù)組:首先將整個(gè)數(shù)組反轉(zhuǎn)。
  2. 反轉(zhuǎn)前 ??m??? 個(gè)元素:然后將前 ??m?? 個(gè)元素反轉(zhuǎn)。
  3. 反轉(zhuǎn)剩余的 ??n-m??? 個(gè)元素:最后將剩余的 ??n-m?? 個(gè)元素反轉(zhuǎn)。

具體步驟

假設(shè)我們有一個(gè)數(shù)組 ??nums = [1, 2, 3, 4, 5]?? 和 ??m = 2??,目標(biāo)是將數(shù)組變?yōu)???[4, 5, 1, 2, 3]??。

  1. 反轉(zhuǎn)整個(gè)數(shù)組
  • 原數(shù)組:??[1, 2, 3, 4, 5]??
  • 反轉(zhuǎn)后:??[5, 4, 3, 2, 1]??
  1. 反轉(zhuǎn)前 m? 個(gè)元素
  • 前 ??m?? 個(gè)元素:??[5, 4]??
  • 反轉(zhuǎn)后:??[4, 5]??
  • 當(dāng)前數(shù)組:??[4, 5, 3, 2, 1]??
  1. 反轉(zhuǎn)剩余的 n-m? 個(gè)元素
  • 剩余的 ??n-m?? 個(gè)元素:??[3, 2, 1]??
  • 反轉(zhuǎn)后:??[1, 2, 3]??
  • 最終數(shù)組:??[4, 5, 1, 2, 3]?

Java 實(shí)現(xiàn)代碼

public class ArrayRotation {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        int m = 2;
        rotate(nums, m);
        for (int num : nums) {
            System.out.print(num + " ");
        }
    }

    public static void rotate(int[] nums, int m) {
        if (nums == null || nums.length == 0 || m < 0) {
            throw new IllegalArgumentException("Invalid input");
        }
        
        int n = nums.length;
        m = m % n; // 處理 m 大于數(shù)組長(zhǎng)度的情況
        
        reverse(nums, 0, n - 1); // 反轉(zhuǎn)整個(gè)數(shù)組
        reverse(nums, 0, m - 1); // 反轉(zhuǎn)前 m 個(gè)元素
        reverse(nums, m, n - 1); // 反轉(zhuǎn)剩余的 n-m 個(gè)元素
    }

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

代碼解釋

  1. 主函數(shù) main?:
  • 初始化數(shù)組 ??nums?? 和旋轉(zhuǎn)次數(shù) ??m??。
  • 調(diào)用 ??rotate?? 方法進(jìn)行數(shù)組旋轉(zhuǎn)。
  • 打印旋轉(zhuǎn)后的數(shù)組。
  1. 旋轉(zhuǎn)方法 rotate?:
  • 檢查輸入的有效性。
  • 計(jì)算實(shí)際需要旋轉(zhuǎn)的步數(shù) ??m??(處理 ??m?? 大于數(shù)組長(zhǎng)度的情況)。
  • 調(diào)用 ??reverse?? 方法三次,分別反轉(zhuǎn)整個(gè)數(shù)組、前 ??m?? 個(gè)元素和剩余的 ??n-m?? 個(gè)元素。
  1. 反轉(zhuǎn)方法 reverse?:
  • 使用雙指針?lè)ń粨Q數(shù)組中的元素,從兩端向中間逐步交換。

這種方法的時(shí)間復(fù)雜度為 O(n),空間復(fù)雜度為 O(1),非常高效。希望這個(gè)解釋對(duì)你有幫助!如果有任何問(wèn)題或需要進(jìn)一步的說(shuō)明,請(qǐng)隨時(shí)告訴我。

以上就是使用Java解決數(shù)組旋轉(zhuǎn)問(wèn)題的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Java解決數(shù)組旋轉(zhuǎn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java根據(jù)分組key構(gòu)建合并數(shù)據(jù)集的代碼詳解

    Java根據(jù)分組key構(gòu)建合并數(shù)據(jù)集的代碼詳解

    這篇文章主要介紹了Java中如何對(duì)List數(shù)據(jù)進(jìn)行雙層分組合并,通過(guò)sub_product_name和approval_result作為分組鍵,使用rowspan實(shí)現(xiàn)跨行合并,最終生成前端可展示的結(jié)構(gòu)化數(shù)據(jù)集,需要的朋友可以參考下
    2025-06-06
  • SpringBoot整體讀取多個(gè)配置屬性及其相關(guān)操作方法

    SpringBoot整體讀取多個(gè)配置屬性及其相關(guān)操作方法

    本文介紹SpringBoot中@ConfigurationProperties用于批量讀取配置屬性,對(duì)比@Value,涵蓋其用法、配置選項(xiàng)、List處理及校驗(yàn)功能,支持寬松綁定與屬性轉(zhuǎn)換,需相關(guān)依賴(lài)啟用,感興趣的朋友一起看看吧
    2025-07-07
  • 手把手帶你用java搞定漢諾塔

    手把手帶你用java搞定漢諾塔

    這篇文章主要給大家介紹了關(guān)于Java青蛙跳臺(tái)階問(wèn)題的解決思路與代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 解決Java?結(jié)構(gòu)化數(shù)據(jù)處理開(kāi)源庫(kù)?SPL的問(wèn)題

    解決Java?結(jié)構(gòu)化數(shù)據(jù)處理開(kāi)源庫(kù)?SPL的問(wèn)題

    這篇文章主要介紹了Java?結(jié)構(gòu)化數(shù)據(jù)處理開(kāi)源庫(kù)?SPL的問(wèn)題,Scala提供了較豐富的結(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù),但編譯型語(yǔ)言的特點(diǎn),也使它不能成為理想的結(jié)構(gòu)化數(shù)據(jù)計(jì)算類(lèi)庫(kù),對(duì)此內(nèi)容感興趣的朋友一起看看吧
    2022-03-03
  • Spring Boot系列教程之死信隊(duì)列詳解

    Spring Boot系列教程之死信隊(duì)列詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot系列教程之死信隊(duì)列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java的分支結(jié)構(gòu)與循環(huán)你知道多少

    Java的分支結(jié)構(gòu)與循環(huán)你知道多少

    這篇文章主要為大家詳細(xì)介紹了Java的分支結(jié)構(gòu)與循環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • spring boot日志管理配置

    spring boot日志管理配置

    這篇文章主要介紹了spring boot日志管理配置的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Springboot之@ConfigurationProperties注解解讀

    Springboot之@ConfigurationProperties注解解讀

    在Spring Boot中,@EnableConfigurationProperties注解的主要作用是激活@ConfigurationProperties注解的配置屬性類(lèi),從而讓配置屬性類(lèi)能被Spring容器管理,這樣的話(huà),我們就可以在屬性類(lèi)中輕松地使用@ConfigurationProperties來(lái)綁定配置文件中的屬性
    2024-10-10
  • springboot創(chuàng)建監(jiān)聽(tīng)和處理事件的操作方法

    springboot創(chuàng)建監(jiān)聽(tīng)和處理事件的操作方法

    這篇文章主要介紹了springboot創(chuàng)建監(jiān)聽(tīng)和處理事件的操作方法,使用Spring Boot的事件機(jī)制來(lái)監(jiān)聽(tīng)和處理事件有多種優(yōu)勢(shì),本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-07-07
  • 在本地用idea連接虛擬機(jī)上的hbase集群的實(shí)現(xiàn)代碼

    在本地用idea連接虛擬機(jī)上的hbase集群的實(shí)現(xiàn)代碼

    這篇文章主要介紹了在本地用idea連接虛擬機(jī)上的hbase集群的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

突泉县| 常山县| 江山市| 沁源县| 高碑店市| 民乐县| 庆安县| 长沙市| 乌兰察布市| 泰宁县| 衡阳县| 望谟县| 家居| 齐齐哈尔市| 赤壁市| 扎囊县| 和硕县| 鄂尔多斯市| 白沙| 康保县| 孝义市| 顺平县| 林州市| 原阳县| 前郭尔| 奇台县| 万载县| 泰和县| 石台县| 武川县| 昭平县| 周宁县| 四平市| 威宁| 仁布县| 师宗县| 湘潭市| 涿州市| 台东市| 泸水县| 望城县|