您的位置:首页 > 其它

[LeetCode]Rotate Array

2015-07-20 16:10 267 查看
解题思路:
一,后面两个笨算法,都要移动好多次,这个算法只需要移动n-k次

边界条件:nums的长度小于等于1,k == 0,这些都直接返回,不要算了;
前条件:k若大于nums的长度,则k对nums.size()取余; 把nums最后k个元素取出
不变式,nums前面 length-k个元素,向右移动k个位置。
结束条件:nums内部移动完毕,把前条件中取出的k个元素一次放到nums前面对应的位置

class Solution {
public:
void rotate(vector<int>& nums, int k) {
if ( nums.size() <= 1 || k == 0) return;

if ( nums.size() <= k )
k = k % nums.size();

vector<int> temp;
temp.assign(nums.begin() + nums.size()-k, nums.end());

for (int i = nums.size()-k-1; i >= 0; --i){
nums[i+k] = nums[i];
}
for (int i = 0; i < temp.size(); ++i){
nums[i] = temp[i];
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: