成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

LeetCode 189:旋轉(zhuǎn)數(shù)組 Rotate Array

zhangrxiang / 1629人閱讀

摘要:公眾號愛寫給定一個(gè)數(shù)組,將數(shù)組中的元素向右移動個(gè)位置,其中是非負(fù)數(shù)。只要截取輸入的后位的數(shù)組與輸入的剩余長度的數(shù)組,即為所求但是題目要求使用空間復(fù)雜度為的原地算法。利用切片切片組成新數(shù)組

公眾號:愛寫bug(ID:icodebugs)

給定一個(gè)數(shù)組,將數(shù)組中的元素向右移動 k 個(gè)位置,其中 k 是非負(fù)數(shù)。

Given an array, rotate the array to the right by k steps, where k is non-negative.

示例 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]

說明:

盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個(gè)問題。

要求使用空間復(fù)雜度為 O(1) 的 原地 算法。

Note:

Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

Could you do it in-place with O(1) extra space

解題思路:

? 如果按照示例那種一步一步向右移,太慢。我們直接看 示例1輸入 和 最終結(jié)果輸出(移動步數(shù)k=3):

輸入: [1,2,3,4,5,6,7]
輸出: [5,6,7,1,2,3,4]

找一下規(guī)律,我起先是以為直接以該索引 i 與 i+3 交換位置,不過仔細(xì)看一下就發(fā)現(xiàn)錯(cuò)的太離譜了。

我們可以發(fā)現(xiàn)輸出前三位數(shù)是輸入的后三位,輸出后四位數(shù)是輸入的前四位。而移動步數(shù) k=3剩余長度=數(shù)組長度 - 移動步數(shù) = 7-3=4 ,剛好對應(yīng)我們發(fā)現(xiàn)的規(guī)律。

只要截取輸入的后k位的數(shù)組與 輸入的剩余長度的數(shù)組,即為所求:[5,6,7]+[1,2,3,4]

但是:題目要求使用空間復(fù)雜度為 O(1) 的 原地 算法。這在python中可以利用切片特性直接像上面那樣截取,而空間復(fù)雜度不變。但是在CC++、Java里是肯定會改變空間復(fù)雜度,不滿足要求。

這時(shí)候可以換個(gè)思路,如下所示不斷反轉(zhuǎn)特定長度數(shù)組:

輸入: [1,2,3,4,5,6,7]

反轉(zhuǎn)整個(gè)數(shù)組: [7,6,5,4,3,2,1]

反轉(zhuǎn)前k位:[5,6,7]

反轉(zhuǎn)剩余的: [1,2,3,4]

輸出: [5,6,7,1,2,3,4]

或者改變一下順序先反轉(zhuǎn)前 剩余位數(shù)和后k位:

輸入: [1,2,3,4,5,6,7]

反轉(zhuǎn)前剩余長度的: [4,3,2,1]

反轉(zhuǎn)后k位:[7,6,5]

此時(shí)數(shù)組:[4,3,2,1,7,6,5]

反轉(zhuǎn)整個(gè)數(shù)組: [5,6,7,1,2,3,4]

輸出: [5,6,7,1,2,3,4]

Java(反轉(zhuǎn)數(shù)組):
class Solution {
    public void rotate(int[] nums, int k) {
        int numsLen=nums.length,temp;
        k=k%numsLen;
        if(k==0) return;
        swapArray(nums,0,numsLen-1);//反轉(zhuǎn)整個(gè)數(shù)組
        swapArray(nums,0,k-1);//反轉(zhuǎn)0到k-1索引,前k位的數(shù)組
        swapArray(nums,k,numsLen-1);//反轉(zhuǎn)k到末尾索引,后剩余位數(shù)位的數(shù)組
    }
    private void swapArray(int[] nums,int start,int end){//反轉(zhuǎn)函數(shù)
        int temp;
        for (int i=start,j=end;i

注:Java段代碼是以反轉(zhuǎn)方法里介紹的第一個(gè)方法為例,第二種方法只要改變一下

swapArray(nums,0,numsLen-1);//反轉(zhuǎn)整個(gè)數(shù)組
swapArray(nums,0,k-1);//反轉(zhuǎn)0到k-1索引,前k位的數(shù)組
swapArray(nums,k,numsLen-1);//反轉(zhuǎn)k到末尾索引,后剩余位數(shù)位的數(shù)組

的順序和參數(shù)即可,不再復(fù)現(xiàn)。

Python3(利用切片):
class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        nums_len = len(nums)
        k = k%nums_len
        nums[0:nums_len] = nums[nums_len-k:] + nums[:nums_len-k]#切片組成新數(shù)組

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45107.html

相關(guān)文章

  • LeetCode 189旋轉(zhuǎn)數(shù)組 Rotate Array

    摘要:公眾號愛寫給定一個(gè)數(shù)組,將數(shù)組中的元素向右移動個(gè)位置,其中是非負(fù)數(shù)。只要截取輸入的后位的數(shù)組與輸入的剩余長度的數(shù)組,即為所求但是題目要求使用空間復(fù)雜度為的原地算法。利用切片切片組成新數(shù)組 公眾號:愛寫bug(ID:icodebugs) 給定一個(gè)數(shù)組,將數(shù)組中的元素向右移動 k 個(gè)位置,其中 k 是非負(fù)數(shù)。 Given an array, rotate the array to the ...

    cnsworder 評論0 收藏0
  • LeetCode每日一題: 旋轉(zhuǎn)數(shù)組(No.189

    摘要:題目旋轉(zhuǎn)數(shù)組給定一個(gè)數(shù)組,將數(shù)組中的元素向右移動個(gè)位置,其中是非負(fù)數(shù)。例如將到反轉(zhuǎn)將到反轉(zhuǎn)全部翻轉(zhuǎn)得到最后結(jié)果。這里要注意下還有這樣的情況即大于數(shù)組長度的情況。次旋轉(zhuǎn)次旋轉(zhuǎn)轉(zhuǎn)回來了次旋轉(zhuǎn)次旋轉(zhuǎn)轉(zhuǎn)回來了次旋轉(zhuǎn)所以這里的有效等于對數(shù)組長度求余。 題目: 旋轉(zhuǎn)數(shù)組 給定一個(gè)數(shù)組,將數(shù)組中的元素向右移動 k 個(gè)位置,其中 k 是非負(fù)數(shù)。 示例: 輸入: [1,2,3,4,5,6,7] 和 k...

    FreeZinG 評論0 收藏0
  • LeetCode 189.Rotate Array

    摘要:問題描述解題思路使用數(shù)組自帶的方法和方法把數(shù)組最后一個(gè)取出來加入到頭部。使用數(shù)組的方法得到后個(gè)數(shù),再用方法刪去后個(gè)數(shù),最后用方法把得到的后個(gè)數(shù)添加到數(shù)組前面。 問題描述: 189.Rotate Array Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, t...

    leanote 評論0 收藏0
  • LeetCode 189: Rotate Array (Java)

    摘要:解法一假設(shè)數(shù)組為先把換到的位置,把拿著換到的位置,把拿著換到的位置。。。停止條件姑且假設(shè)為當(dāng)置換的數(shù)回到數(shù)組的首位。不過換一個(gè)栗子上述方法就不通了,比如數(shù)組為換一輪發(fā)現(xiàn)結(jié)果是。 題目: Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array [...

    Airmusic 評論0 收藏0
  • LeetCode 61:旋轉(zhuǎn)鏈表 Rotate List

    摘要:給定一個(gè)鏈表,旋轉(zhuǎn)鏈表,將鏈表每個(gè)節(jié)點(diǎn)向右移動個(gè)位置,其中是非負(fù)數(shù)。按上述思路解,與旋轉(zhuǎn)數(shù)組那道題大同小異,來介紹另一種很簡單高效的方法。只需在第個(gè)節(jié)點(diǎn)之后切斷,首尾連接即可。另外可能大于鏈表長度,應(yīng)當(dāng)做求余運(yùn)算。 ?給定一個(gè)鏈表,旋轉(zhuǎn)鏈表,將鏈表每個(gè)節(jié)點(diǎn)向右移動 k 個(gè)位置,其中 k 是非負(fù)數(shù)。 Given a linked list, rotate the list to the ...

    Hwg 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<