牛客题霸 [ 旋转数组] C++题解/答案

题目描述

一个数组A中存有N(N&gt0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 A0 A1 ……AN-M-1 )(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

题解:

很多人都用额外的变量来实现移动,我这提供一个比较巧妙的思路
[1,2,3,4,5,6]—>[5,6,1,2,3,4]
我们可以先将整个数组翻转
就成:[6,5,4,3,2,1]
因为是移动m,所以我们前m个数字再翻转
就成:[5,6,4,3,2,1]
我们再将第m+1位到最后,所有数翻转
就成:[5,6,1,2,3,4]
这样就实现了移动,还没有用到其他任何变量

代码:

class Solution {public:/*** 旋转数组* @param n int整型 数组长度* @param m int整型 右移距离* @param a int整型vector 给定数组* @return int整型vector*/vector<int> solve(int n, int m, vector<int>& a) {// write code herem = m%n;reverse(a.begin(), a.end());reverse(a.begin(), a.begin()+m);reverse(a.begin()+m, a.end());return a;//return a;}
};

牛客题霸 [ 旋转数组] C++题解/答案相关推荐

  1. 牛客题霸 [旋转字符串]C++题解/答案

    牛客题霸 [旋转字符串]C++题解/答案 题目描述 字符串旋转: 给定两字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(都不为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可 ...

  2. 牛客题霸 [ 旋转数组的最小数字] C++题解/答案

    牛客题霸 [ 旋转数组的最小数字] C++题解/答案 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. NOT ...

  3. 牛客题霸 [ 寻找峰值] C++题解/答案

    牛客题霸 [ 寻找峰值] C++题解/答案 题目描述 山峰元素是指其值大于或等于左右相邻值的元素.给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰.找到索引最大的那个山峰元素并 ...

  4. 牛客题霸 [顺时针旋转矩阵] C++题解/答案

    牛客题霸 [顺时针旋转矩阵] C++题解/答案 题目描述 有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度. 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于 ...

  5. 牛客题霸 [ 缺失数字] C++题解/答案

    牛客题霸 [ 缺失数字] C++题解/答案 题目描述 从0,1,2,-,n这n+1个数中选择n个数,找出这n个数中缺失的那个数,要求O(n)尽可能小. 题解: 我们可以用map来标记已出现过的数字 因 ...

  6. 牛客题霸 二分查找 C++题解/答案

    牛客题霸 二分查找 C++题解/答案 题目描述 请实现有重复数字的有序数组的二分查找. 输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一. 示例1 输入 复制 5, ...

  7. 牛客题霸 [ 大数乘法] C++题解/答案

    牛客题霸 [ 大数乘法] C++题解/答案 题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回. (字符串长度不大于10000,保证字符串仅由'0'~'9'这10种字符 ...

  8. 牛客题霸 [ 孩子们的游戏] C++题解/答案

    牛客题霸 [ 孩子们的游戏] C++题解/答案 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样 ...

  9. 牛客题霸 [比较版本号] C++题解/答案

    牛客题霸 [比较版本号] C++题解/答案 题目描述 如果version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0. 输入的ver ...

最新文章

  1. php注释idea设置,IDEA对类生成注释以及自己定义代码生成方式
  2. docker 可视化管理工具 rancher 简介
  3. centos7 redis5.0以后版本 集群部署示例
  4. R语言观察日志(part5)--利用readr和readxl包读写数据
  5. IDEA如何像Eclipse打开多个项目?
  6. Android中TableLayout如何让列自动换行
  7. WebAPI Delete方法报错405 Method Not Allowed
  8. MySQL5 使用概要
  9. 在Windows上安装虚拟机详细图文教程
  10. 21天学通C语言-学习笔记(4)
  11. MathType安装教程,以及部分功能变灰,重新点亮
  12. 教你用Python自制一张好看的指数估值图!这招很好用!
  13. S4 HANA CO和FI自动集成:成本中心分配分摊业务实践-KSV5/KSU5
  14. 面部关键特征点(Landmark)的定位
  15. Worthington 分子生物学解读
  16. 微信小程序开发入门教程(八)
  17. Erupt Framework:开源神器,助你无需前端代码搞定企业级后台管理系统
  18. “PS”制作海报总结(一)
  19. 配置本地时间服务器(集群)
  20. 计算机操作系统汤晓丹第四版+指导解析

热门文章

  1. Python项目可以有多大?最多可以有多少行代码?
  2. 不爱读书怎么办?用这个新奇的方法,熟知137亿年来的地球通史
  3. 有人问我:AI这么火,要不要去追赶AI的热潮?
  4. asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格
  5. linux 创建ll,两台linux建立GRE隧道
  6. c#物联网_C# 基础知识系列- 16 开发工具篇
  7. mysql报4934_mysql-Mariadb语法错误1064(42000)
  8. libgo 支持mysql,loadrunner通过使用libmysql.dll完成mysql的测试-Go语言中文社区
  9. [计组]压缩BCD码指二进制编码的十进制
  10. 汇编语言中常见的标志位: CF, PF, AF, ZF, SF,TF,IF,DF, OF