leetcode練習旋轉數組

第一中方法即爲hash的方法:

第二種採用了循環,但是不全面,輸入測試用例爲[1,3], k=3 時,無法進行交換:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int len=nums.size();
        int round=1;
        if(k==0)
            return;
        for(;round<(len/k);round++)
        {
            for(int i=len-round*k; i<len-(round-1)*k; i++)
            {
                int tmp = nums[i];  //swap
                nums[i]=nums[i-k];
                nums[i-k] = tmp;
            }
        }
        //end of swap, start bubble
        int i=len-(round*k)-1;
        for(;i>=0;i--)
        {
            int index=i;
            for(int j=len-round*k;j<len-(round-1)*k;j++)
            {
                int tmp=nums[index];   //swap
                nums[index]=nums[j];
                nums[j]=tmp;
                index=j;
            }
        }     
    }
};

第三種,採用額外的數組

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        std::map<int,int> new_nums;
        int new_index=0;
        int len=nums.size();
        for(int i=0;i<len;i++)
        {
            new_index = (i+k)%len;
            new_nums.insert(pair<int,int>(new_index,nums[i]));
        }
        for(int i=0;i<len;i++)
        {
            std::map<int,int>::iterator iter;
            iter = new_nums.find(i);
            nums[i]=iter->second;
        }  
    }
};

這個代碼通過了測試,但是因爲進行了兩次循環且使用了額外的空間,顯示結果爲:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章