LeetCode-旋轉(zhuǎn)數(shù)組

題目要求:給定一個數(shù)組,將數(shù)組中的元素向右移動 k 個位置,其中 k 是非負(fù)數(shù)。
示例 1:

輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右旋轉(zhuǎn) 1 步: [7,1,2,3,4,5,6]
向右旋轉(zhuǎn) 2 步: [6,7,1,2,3,4,5]
向右旋轉(zhuǎn) 3 步: [5,6,7,1,2,3,4]

示例 2:

輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋: 
向右旋轉(zhuǎn) 1 步: [99,-1,-100,3]
向右旋轉(zhuǎn) 2 步: [3,99,-1,-100]

說明:

1.盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
2.要求使用空間復(fù)雜度為 O(1) 的原地算法。

解答一:
按照示例每次循環(huán)把最后一位數(shù)字挪到第一位,隨后各位數(shù)字提前一位(注意數(shù)組越界錯誤,我犯了這種錯)

public class Solution {
    public void rotate(int[] nums, int k) {
        int length = nums.length;
            while (k > 0)//循環(huán)幾次就看k是多少
            {
                int t = 0;
                t = nums[length - 1];//這是獲取數(shù)組最高位置上的數(shù)字
                for (int j = length - 2; j >= 0; j--)//從倒數(shù)第二個數(shù)字開始,倒敘循環(huán)。循環(huán)主要目的就是把其他數(shù)字位置都抬高一位
                {
                    nums[j + 1] = nums[j];
                }
                nums[0] = t;//抬高玩其他的,就可以直接把最高位上的數(shù)字賦值到0號位上了
                k--;//完成一個循環(huán)
            }
           
    }
}

解答二:
先將k轉(zhuǎn)換成[0, n-1]內(nèi)的數(shù)。再對整個數(shù)組進(jìn)行翻轉(zhuǎn),再對[0, k-1]位置的數(shù)字進(jìn)行反轉(zhuǎn),再對剩下的部分進(jìn)行翻轉(zhuǎn)。

比如[1,2,3,4,5,6,7]  k=3 
第一次翻轉(zhuǎn)[7,6,5,4,3,2,1]//對整個數(shù)組進(jìn)行翻轉(zhuǎn)
第二次翻轉(zhuǎn)[5,6,7,4,3,2,1]//對[0,k-1]即[0,2]位置數(shù)字進(jìn)行翻轉(zhuǎn)
第三次翻轉(zhuǎn)[5,6,7,1,2,3,4]//對剩下的部分進(jìn)行翻轉(zhuǎn)
public class Solution {
    public void rotate(int[] nums, int k) {
        k = (nums.length + (k % nums.length)) % nums.length; // 保證k為正

        int tmp;
        for (int i = 0, j = nums.length - 1; i < j; i++, j--) {
            tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }

        for (int i = 0, j = k - 1; i < j; i++, j--) {
            tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }

        for (int i = k, j = nums.length - 1; i < j; i++, j--) {
            tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 解法一: 使用取余的方法,但是因?yàn)橐陆ㄒ粋€數(shù)組,需要用到額外的空間。 解法二: 原地算法,以 k 為分界線,將數(shù)...
    Little丶Jerry閱讀 309評論 0 0
  • 村落里有一只烏鴉 總是被村民嘲笑驅(qū)趕 它對于人民來說 是厄運(yùn)和倒霉的象征 烏鴉憤憤地拋向了鳥屎 從此在深林里修煉 ...
    斑斕的流星閱讀 544評論 0 0
  • 文/一杯熱咖啡 親愛的,我還沒遇見你 距離上次戀愛已經(jīng)有幾個年頭了 我一直盼望著你來 我盼望著你會早點(diǎn)來 但是又怕...
    一杯熱咖啡閱讀 325評論 1 3

友情鏈接更多精彩內(nèi)容