[Leetcode] Rotate Array

本文介绍了一种常见的数组旋转问题,即如何将一个包含n个元素的数组向右旋转k步,并给出了具体的C语言实现代码。文章提供了两种解决方案,一种适用于k小于等于数组长度一半的情况,另一种适用于k大于数组长度一半的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

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

解题思路:

数组的初始化以及steps题目已经给予,如果把数组看成一个环,我们要做的只是将环进行旋转。steps与数组的length要注意,因为steps可能大于length,这时候需要进行取余。至于数组旋转的过程中会出现值的覆盖问题,需要用到临时的变量(或数组)进行存储,旋转的过程中还要注意方向,否则会超时。

C代码如下:

void rotate(int nums[], int n, int k) {
    int temp = k % n;
    int val;
    if(temp<=(n/2)){
        for(int i=0;i<temp;i++){
            val = nums[n-1];
            for(int j=n-1;j>0;j-- ){
                nums[j] = nums[j-1];
            }
            nums[0] = val;
        }
    }else{
        for(int i=0;i<n-temp;i++){
            val = nums[0];
            for(int j=0;j<n-1;j++ ){
                nums[j] = nums[j+1];
            }
            nums[n-1] = val;
        }
    }
    
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值