LC 189 旋转数组【数组】

该博客介绍了LeetCode第189题的解决方案,题目要求在O(n)时间和O(1)空间复杂度下,将数组元素向右移动k个位置。博主提出通过保存每个元素并逐个替换到其最终位置的方法,使用一个临时变量temp存储被替换的数字,每次循环将下一个元素放到正确位置,同时更新计数器count,当count等于数组大小时结束循环。
摘要由CSDN通过智能技术生成

LC 189 旋转数组


题目描述

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
要求时间O(n),空间O(1)


题解

void rotate(vector<int>& nums, int k) {

         k = k % nums.size();
        int count = 0;
        for (int start = 0; count < nums.size(); start++) {
            int current = start;
            int pre = nums[start];
            do {
                int next = (current + k) % nums.size();
                int temp = nums[next];
                nums[next] = pre;
                pre = temp;
                current = next;
                count++;
            } while (start != current);
        }
    }



直接把每一个数字放到它最后的位置,但这样的后果是遗失原来的元素。

因此,我们需要把被替换的数字保存在变量 temp 里面,循环将下一个元素存到最终位置,调整一次count计数++,count满足==size退出。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值