当前位置: 首页 > news >正文

【C++】每日一练(轮转数组)

 

本篇博客给大家带来的是用C++语言来解答轮转数组!

🐟🐟文章专栏:每日一练

🚀🚀若有问题评论区下讨论,我会及时回答

❤❤欢迎大家点赞、收藏、分享!

今日思想:不服输的少年啊,请你再努力一下!

题目描述:

方法1: 三次逆置

思路:下图这种思路不是一般人能想出来的,大家知道就行。

代码实例:

#define _CRT_SECURE_NO_WARNINGS 1
void reverse(int* nums, int left,int right)
{
    while ((left < right)
    {
        int  tmp = nums[left];
        nums[left] = nums[right];
        nums[right] = tmp;

        left++;
        right--;
    }
}
void rotate(int* nums, int numsSize, int k) {
    k = k % numsSize;//防止k>numsSize
    //前numsSize-k个数据逆置
    reverse(nums, 0, numsSize - k - 1);//第一次逆置
    //后k个数据逆置
    reverse(nums, numsSize - k, numsSize - 1);//第二次逆置
    //整体逆置
    reverse(nums, 0, numsSize - 1);
}

方法2:创建新数组 

思路:先创建新数组,然后把轮转k次的数组放到临时数组中去,最后再放回去。

代码实例:

void rotate(int* nums, int numsSize, int k) {
    //创建新数组
    int newArr[numsSize];
    //向右轮转k次并保存在临时数组中
    for(int i=0;i<numsSize;i++)
    {
        newArr[(i+k)%numsSize]=nums[i];
    }
    //把临时数组的值放回去
    for(int i=0;i<numsSize;i++)
    {
        nums[i]=newArr[i];
    }
}

完!

相关文章:

  • SSL/TLS 1.2过程:Client端如何验证服务端证书?
  • CentOS 8 停止维护后通过 rpm 包手动安装 docker
  • MIDI,AI 3D场景生成技术
  • Java中的访问修饰符有哪些
  • word处理控件Aspose.Words教程:使用 Python 删除 Word 中的空白页
  • 机器学习与深度学习中模型训练时常用的四种正则化技术L1,L2,L21,ElasticNet
  • C++语言的动态规划
  • C++基础 [三] - 面向对象三
  • MySQL自动化配置工具开发
  • 电子电气架构 --- 分布到集中的动カ系统及基于域控制器的架构
  • node-ddk,electron 开发组件
  • CSS元素层叠顺序规则
  • 读 Gemma 3 二分
  • 异步加载错误如何解决
  • AI驱动的视频字幕提取与翻译工具
  • 【Celeborn】如何利用Ratis实现集群High Available(HA)
  • 单例模式 (Singleton Pattern)
  • redis配置文件
  • 【Linux】进程(1)进程概念和进程状态
  • JVM常用概念之超态虚拟调用
  • 泽连斯基与埃尔多安会面,称已决定派遣代表团前往伊斯坦布尔
  • 国防部:菲方应停止一切侵权挑衅危险举动,否则只会自食苦果
  • 杞支雅男评《1517》|放眼世界,立足德国
  • 上海虹桥国际咖啡文化节周五开幕,来看Coffeewalk通关攻略
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名