Rotate Array (LeetCode)

Question:

https://leetcode.com/problems/rotate-array/

解答:

就是第i的值移到第(i+k),(i+k)的值移到(i+k+k),一直移到不能移了,然后i+1,继续同样的操作。

用了一个converted数组,表示当前点是否是已经移位后的结果。

class Solution {
public:
    void rotate(int nums[], int n, int k) {
        k = k%n;
        
        if (k == 0)
            return;
        
        std::vector<bool> converted(n, false);
        int temp;
        
        for (int i = 0; i < n; i++)
        {
            if (converted[i])
                continue;
                
            int curri = i;
            int newi = (i+k)%n;
            temp = nums[curri];
            
            while (!converted[newi])
            {
                int temp2 = nums[newi];
                nums[newi] = temp;
                
                converted[newi] = true;
                curri = newi;
                newi = (newi+k)%n;
                
                temp = temp2;
            }
        }
    }
};

 

posted @ 2015-03-13 14:04  smileheart  阅读(114)  评论(0)    收藏  举报