【C语言】每日一题(旋转数组)

news2024/12/18 12:51:55

旋转数组,链接奉上
在这里插入图片描述

目录

  • 方法:
    • 创建额外的数组:
      • 整体思路:
      • 代码实现:
    • 数组反转:
      • 整体思路:
      • 代码实现:
      • 小插曲:

方法:

创建额外的数组:

整体思路:

创建一个额外的数组,将原数组中的数字根据k(即要向右轮转的个数)放到新的数组中,最后将新的数组赋值给原数组

细节:

在放置在数组时,分为两种情况:
例如:

1 2 3 4 5 6 7 原数组
6 7 1 2 3 4 5 轮转后的数组

我们发现:

原数组中的1在新的数组中在第三位2第四位
6第一位
这就说明我们在放置时需要注意不通情况下放置的方法不同

代码实现:

void rotate(int* nums, int numsSize, int k)
{
    k = k % numsSize;
    int arr[numsSize];
    int j = 0;
    for(int i = 0; i < numsSize; i++)
    {
        //判断两种情况
        if(i + k <= numsSize - 1)
        {
            arr[i+k] = nums[i];
        }
        else
        {
            arr[j++] = nums[i];
        }
    }
    //赋值到原数组
    for(int i = 0; i < numsSize; i++)
    {
        nums[i] = arr[i];
    }
}

数组反转:

整体思路:

将字符串 反转3次
1.先整体翻转
2.根据k将前半部分再次翻转
3.将剩下的数组再反转

例如:假设我们有如下数组,我们轮转2

1 2 3 4 5 6 原数组
6 5 4 3 2 1 整体翻转的数组
5 6 1 2 3 465翻转,41翻转后的结果即为轮转2个的结果

细节:
当我们传参时,知道数组的首尾,就可以将首尾之间的元素进行翻转,
另外,传参时要注意首尾的大小,防止越界等现象发生

代码实现:

void reverse(int* start,int* end)
{
   while(end > start)
   {
       int tmp = *start;
       *start = *end;
       *end = tmp;
       end--;
       start++;
   }
}

void rotate(int* nums, int numsSize, int k)
{
    k = k % numsSize;
    reverse(nums, nums + numsSize - 1);
    reverse(nums, nums + k -1);
    reverse(nums + k, nums + numsSize - 1);
}

小插曲:

当时实现代码时,我考虑到nums+k-1会出现负数的情况,但是我打算先将整体逻辑敲出来,敲出来之后就直接提交了,没想到的是居然能过,这就让我困惑起来
后来我举例代入,发现当nums+k-1小于0时,while循环不会进入,=0时也不会进入,无意识敲得代码居然有如此严密的逻辑性(震惊)

欢迎讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Dockerfile镜像实战】构建LNMP环境并运行Wordpress网站平台

这里写目录标题 一、项目背景和要求二、项目环境三、部署过程1&#xff09;创建自定义网络2&#xff09;部署NginxStep1 创建工作目录并上传相关软件包Step2 编写Dockerfile文件Step3 编写配置文件nginx.confStep4 创建nginx镜像Step5 运行容器 3&#xff09;部署MysqlStep1 创…

【Axure高保真原型】可视化图表图标

今天和粉丝们免费分享可视化图表图标原型模板&#xff0c;包括柱状图、条形图、环形图、散点图、水波图等常用的可视化图表图标。 【原型效果】 【原型预览】 https://axhub.im/ax9/d402c647c82f9185/#c1 【原型下载】 这个模板可以在 Axure高保真原型哦 小程序里免费下载哦…

Node学习笔记之HTTP 模块

回顾&#xff1a;什么是客户端、什么是服务器&#xff1f; 在网络节点中&#xff0c;负责消费资源的电脑&#xff0c;叫做客户端&#xff1b;负责对外提供网络资源的电脑&#xff0c;叫做服务器。 http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块…

EC11编码器编码使用

文章目录 前要原理脉冲与定位功能硬件设计 编程轮询模式定时器Encoder模式 结束语 前要 关于EC11编码器的了解可以参考两篇文章&#xff0c;比较详细&#xff0c;在此就不多介绍了&#xff1a; 一篇文章带你了解——EC11编码器&#xff08;关于硬件、原理图、上下拉等都有讲&…

linux性能分析(五)如何学习linux性能优化

一 如何学习linux性能优化 强调&#xff1a; 由于知识记忆曲线以及某些知识点不常用,所以一定要注重复习思考&#xff1a; 如何进行能力转义以及能力嫁接? --> 真正站在巨人的肩膀上性能调优的目的&#xff1a; 不影响系统稳定性的资源最大利用化补充&#xff1a; 性能…

Python:函数篇(每周练习)

编程题&#xff1a; Python第四章作业&#xff08;初级&#xff09; (educoder.net) 题一&#xff1a;无参无返回值函数 def print_hi_human(): # 函数名用小写字母print("人类&#xff0c;你好&#xff01;")if __name__ __main__:print_hi_human() 题二&#…

一起学数据结构(11)——快速排序及其优化

上篇文章中&#xff0c;解释了插入排序、希尔排序、冒泡排序、堆排序及选择排序的原理及具体代码实现本片文章将针对快速排序&#xff0c;快速排序的几种优化方法、快速排序的非递归进行解释。 目录 1. 快速排序原理解析以及代码实现&#xff1a; 2. 如何保证相遇位置的值一…

智慧矿山:让AI算法提高未戴安全带识别率!

未穿戴安全带识别AI算法&#xff0c;作为智慧矿山的重要应用之一&#xff0c;不仅可以有效提高矿山工作人员的安全意识&#xff0c;还可以降低事故发生的概率。然而&#xff0c;识别准确率的提高一直是该算法面临的挑战之一。为了解决这个问题&#xff0c;研究人员不断努力探索…

vue3如何实现页面跳转?

首先、给元素绑点击事件 其次 写跳转路由 总结&#xff1a;一定不要忘了引入Router

UE5--物体卡片与材质入门

参考资料&#xff1a; 《Unreal Engine5 入门到精通》--左央 虚幻引擎5.2文档&#xff1a;https://docs.unrealengine.com/5.2/zh-CN/ 前言&#xff1a; 跟着左央老师的《Unreal Engine5 入门到精通》学习制作AI版胡闹厨房&#xff0c;把学习过程与学习到的东西归纳总结起来。 …

裸机与RTOS(概念、关系、区别)

目录 裸机 什么是裸机&#xff1f; 裸机开发的特点 STM32裸机开发 RTOS 什么是RTOS&#xff1f; RTOS技术的概念及特点 STM32中的RTOS 裸机开发与RTOS开发对比分析 裸机开发 RTOS开发 如何选择&#xff1f; 裸机 什么是裸机&#xff1f; 在嵌入式领域&#xff0c;…

【大数据】Kafka 实战教程(一)

Kafka 实战教程&#xff08;一&#xff09; 1.Kafka 介绍1.1. 主要功能1.2. 使用场景1.3 详细介绍1.3.1 消息传输流程1.3.2 Kafka 服务器消息存储策略1.3.3 与生产者的交互1.3.4 与消费者的交互 2.Kafka 生产者3.Kafka 消费者3.1 Kafka 消费模式3.1.1 At-most-once&#xff08;…

手把手教你使用Express框架在Node服务端实现图片渲染

手把手教你使用Express框架在Node服务端实现图片渲染 1.前言2.node-canvas库3.搭建node服务端环境3.1 初始化项目3.2 使用内置http模块创建服务3.3 使用Express创建服务 4.服务端渲染图片4.1 创建Express路由4.2 绘制三角形4.3 静态资源中间件4.4 写入图片文件4.5 渲染Echarts图…

STM32,我想看单片机上的外设时钟,我怎么看?

一&#xff1a;在工程中加入rcc文件 首先需要加载我们的时钟函数的文件 stm32f10x_rcc.h 和 stm32f10x_rcc.c 文件 二&#xff1a;查看文件 在h头文件 尾部&#xff0c;有我们这个总线的函数 在函数体内&#xff0c;有我们这个宏定义的 外设时钟&#xff0c;我们拿就行了 APB2_…

【C++】C++11新特性之右值引用与移动语义

文章目录 一、左值与左值引用二、右值与右值引用三、 左值引用与右值引用比较四、右值引用使用场景和意义1.左值引用的短板2.移动构造和移动赋值3.STL中右值引用的使用 五、万能引用与完美转发1.万能引用2.完美转发 一、左值与左值引用 在C11之前&#xff0c;我们把数据分为常…

win10专业版驱动开发

我使用的系统版本如何下&#xff1a; 使用的visual studio为VS2019,使用的SDK,WDK如下&#xff1a; 在visual studio单个组件里选择SDK10.0.018362.0 在WDK里面选择版本为&#xff1a; 下载链接如下&#xff1a; 以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Le…

计算机算法分析与设计(16)---Dijkstra算法(含C++代码)

文章目录 一、知识概述1.1 算法描述1.2 例题分析 二、代码编写 一、知识概述 1.1 算法描述 1.2 例题分析 二、代码编写 输入&#xff1a;  第一行&#xff1a;图的顶点数n  第二行&#xff1a;图的边数k  第三行&#xff1a;算法起点begin&#xff0c;算法终点end  接下来…

设计模式-责任链设计模式

核心思想 客户端发出一个请求&#xff0c;链上的对象都有机会来处理这一请求&#xff0c;而客户端不需要知道谁是具体的处理对象让多个对象都有机会处理请求&#xff0c;避免请求的发送者和接收者之间的耦合关系&#xff0c;将这个对象连成一条调用链&#xff0c;并沿着这条链…

Java面试(基础篇)——解构Java常见的基础面试题 结合Java源码分析

fail-safe 和fail-fast机制 Fail-fast&#xff1a;快速失败 Fail-fast &#xff1a; 表示快速失败&#xff0c;在集合遍历过程中&#xff0c;一旦发现容器中的数据被修改了&#xff0c;会立刻抛出ConcurrentModificationException 异常&#xff0c;从而导致遍历失败 package …

经典链表问题:解析链表中的关键挑战

这里写目录标题 公共子节点采用集合或者哈希采用栈拼接两个字符串差和双指针 旋转链表 公共子节点 例如这样一道题&#xff1a;给定两个链表&#xff0c;找出它们的第一个公共节点。 具体的题目描述我们来看看牛客的一道题&#xff1a; 这里我们有四种解决办法&#xff1a; …