代码编织梦想

一、题目描述

轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
在这里插入图片描述

二、题目解析

本题目,我给大家介绍两种解决方法,解决方法如下:

方法一:三段逆置

①、先将前n-k个数据进行逆置,这里需要注意的是最后一个前n-k个元素的下标,应该是n-k-1.
在这里插入图片描述
②、第二步,将后k个数据再进行逆置操作。
在这里插入图片描述
第三步:整体对两部分进行逆置操作。
在这里插入图片描述

题目代码

//三段逆置
void resver(int *a,int left,int right)
{
    while(left<right)
    {
       int tmp=a[left];
       a[left]=a[right];
       a[right]=tmp;
       left++;
       right--;
    }
}

void rotate(int* nums, int numsSize, int k)
{
    if(k>numsSize)
    {
        k%=numsSize;
    }
    resver(nums,0,numsSize-k-1);//第一步,前n-k个元素逆置
    resver(nums,numsSize-k,numsSize-1);//第二步,后k个元素逆置
    resver(nums,0,numsSize-1);//整体逆置
}

需要注意的是,当k大于numsizes时,我们需要对k进行取余操作。例如当k比numsizes大于一时,相当于只进行一次轮转。

方法二:利用memcpy进行拷贝

①、利用malloc函数创建一个临时的数组,存放数据。
②、用memcpy函数将前numsSize-k个数据元素拷贝到tmp的第k个元素位置。
在这里插入图片描述
③、将nums数组中剩下的k个元素,拷贝到tmp的起始位置开始。
④、将tmp数组中的所有元素重新拷贝回nums数组中去,并且free掉临时数组tmp.

void rotate(int* nums, int numsSize, int k)
 {
    if(k>numsSize)
    {
        k%=numsSize;
    }
    int *tmp=(int*)malloc(sizeof(int)*numsSize);
    memcpy(tmp+k,nums,sizeof(int)*(numsSize-k));
    memcpy(tmp,nums+(numsSize-k),sizeof(int)*k);
    memcpy(nums,tmp,sizeof(int)*numsSize);
    free(tmp);
}

运行结果

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_64034271/article/details/137654625

189. 轮转数组-爱代码爱编程

题目:给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 规律:当翻转数组后,数组原位置i的元素到了(i + k)% n 的位置。 我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度,我们遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i + k) mod n 的位置,最后将新数组拷贝至原数组即可。

【无标题】-爱代码爱编程

##reverse 使字符串顺序颠倒 abcd dcba 旋转数组 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1

【Leetcode数据结构算法题】轮转数组(顺序表篇)-爱代码爱编程

题目内容: 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 leetcode题目链接(点击即可跳转) 思路分析 看完题目后,我们首先要做的就是理解题目的含义,也就是审题。从不同维度,不同角度的去设问题并主动回答这些问题。题目中出现了一个我们比较陌生的词语“轮转”,可能我们一下子无法理解这个词是啥子玩意儿。这个时候就

LeetCode 189.轮转数组 (双指针)-爱代码爱编程

题目传送门:轮转数组 题目详情: 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5]

LeetCode_算法入门_轮转数组-爱代码爱编程

轮转数组 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,

leetcode刷题之轮转数组(超详解刷爆力扣)-爱代码爱编程

大家好啊,我是小生啊🙈🙈🙈 我可没忘记带着大家刷题呢,嘿嘿兄弟姐妹们,我来啦😎😎😎让我们开始我们今天快乐的力扣刷题之旅吧,啦啦啦~~~ 😝😜😙 🌞🌞🌞 让我们一题多解,刷爆力扣,冲冲冲👊👊👊 力扣练习:轮转数组🏃🏃🏃 一.🏠题目描述二.🏠题目分析三.🏠解决方法1.🚀思路一:化尾为头再循环挪动2.🚀思路二:开辟新空间优化时间3.🚀思路三

LeetCode每日一题(三)——【轮转数组】-爱代码爱编程

问题描述: 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7

LeetCode198.轮转数组-爱代码爱编程

轮转(旋转)数组 问题引入: 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 例如当k = 1时,表示数组里的元素都向后移一位,最后一位元素到数组头部。示例如下。 代码示例求解: //leetcode环境下的实验代码 class Solution { public static void Revers(int[]

leetcode——189.轮转数组-爱代码爱编程

通过万岁!!! 题目:就是给你一个数组,然后进行一个轮转。其实就是将后面k个元素移动到前面去。基础思路:我们定义一个数组,长度为k,保存后面个数组,然后将前面的一次往后保存,然后把这个数组再填充到这个数组的前面即可。时间复

leetcode 189. 轮转数组_leetcode189-爱代码爱编程

🌟 前言 Wassup guys!我是Edison 😎 今天是 LeetCode 上的 leetcode 189. 轮转数组 Let’s get it! 文章目录 1. 题目分析2. 题目图解🍑

leetcode-爱代码爱编程

题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 思路一: 建立一个两倍原数组长度的数组,然后其中保存两遍原数组中的元素,轮转的过程就可以看成是在这个新数组中截取一个原数组

【leetcode】轮转数组_leetcode 轮转数组-爱代码爱编程

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1.三步旋转法2.利用额外的数组 点击查看题目 1.三步旋转法 根据大数

最全leetcode刷题之轮转数组(超详解刷爆力扣)_力扣循环数组(1),2024年最新c c++开发前景怎么样_leetcode 轮转数组-爱代码爱编程

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 需要这份系统化的资料的朋友,可以添加戳这里获取 一个人可以走的很快,但一群人才能走的更远!不论你是正

【leetcode】轮转数组_leetcode轮转数组-爱代码爱编程

👻内容专栏:《LeetCode刷题专栏》 🐨本文概括:189.轮转数组 🐼本文作者:花 碟 🐸发布时间:2023.4.12 目录 思想1 暴力求解 代码实现: 思想2 三次倒置 代码实现:  思想3 memcpy零时拷贝 代码实现: 189.轮转数组 点击跳转到LeetCode平台OJ页面 题目:​​​​