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

题解:学而思编程 数组旋转

【题目来源】

学而思编程:数组旋转

【题目描述】

给定一个整数数组 \(a_1,a_2,⋯ ,a_n\),然后输入一系列数字 \(x_1,x_2,⋯ ,x_m\),如果 \(x_i>0\),代表将数组中的元素向右旋转 \(x_i\) 个位置(例如,\(1,2,3,4,5\) 向右旋转 \(2\) 个位置将变成 \(4,5,1,2,3\))。如果 \(x_i<0\),代表将数组中的元素向左旋转 \(−x_i\) 个位置(例如,\(x_i=−3\) 时,\(1,2,3,4,5\) 向左旋转 \(3\) 个位置将变成 \(4,5,1,2,3\))。

【输入】

输入第一行一个整数 \(n\),表示数组的元素个数。

第二行 \(n\) 个空格分隔的整数,表示数组 \(a_i\)

第三行一个整数 \(m\),表示旋转次数。

第二行 \(m\) 个空格分隔的整数,表示每次旋转的位置\(x_i\)

【输出】

输出 \(m\) 行,第 \(i\) 行输出 \(n\) 个空格分隔的整数,表示第 \(i\) 次旋转后的数组情况。

【输入样例】

7
1 3 5 7 2 4 6
5
0 1 -2 3 -4

【输出样例】

1 3 5 7 2 4 6
6 1 3 5 7 2 4
3 5 7 2 4 6 1
4 6 1 3 5 7 2
5 7 2 4 6 1 3

【核心思想】

  1. 问题描述:给定长度为 \(n\) 的数组 \(a\),执行 \(m\) 次旋转操作(\(x_i > 0\) 向右旋转 \(x_i\) 位,\(x_i < 0\) 向左旋转 \(-x_i\) 位),每次操作后输出当前数组。这是一个模拟问题,核心在于用偏移量避免实际移动数组元素,\(O(1)\) 完成每次旋转。

  2. 算法选择

    • 偏移量追踪:维护一个偏移量 \(p\),表示数组逻辑上的起始位置相对于物理存储的偏移
    • 模运算:所有操作转化为偏移量的加减,对 \(n\) 取模
  3. 关键步骤

    • 初始化:读取 \(n\)、数组 \(a[0..n-1]\)\(m\)
    • 偏移量初始化\(p = 0\)(逻辑起始位置为物理位置 \(0\)
    • 处理每次旋转\(m\) 次):
      • 读取 \(x\)
      • 更新偏移量\(p -= x\)(向右旋转 \(x\) 位等价于逻辑起始位置左移 \(x\) 位,即 \(p\)\(x\)
      • 取模规范化\(p = p \% n\)(控制偏移量在 \([-n+1, n-1]\) 范围内)
      • 输出数组:遍历 \(i = 0\)\(n-1\),输出 \(a[(i + p + n) \% n]\)\(+n\) 再取模处理负数)
    • 注意:向右旋转 \(x\) 位(如 \(1,2,3,4,5 \to 4,5,1,2,3\))等价于逻辑起始位置从 \(0\) 变为 \(n-x\),即 \(p = -x\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(n \times m)\),每次输出 \(n\) 个元素
    • 空间复杂度:\(O(n)\),原数组存储
  5. 模拟的核心思想

    • 虚拟索引:不实际移动数组元素,而是通过偏移量计算逻辑位置到物理位置的映射
    • 模运算优雅处理环形\(p\) 的更新和查询都通过对 \(n\) 取模实现,天然支持左右旋转的统一处理
    • 负数处理\(+n\) 后再取模确保索引始终非负
    • 适用于数组旋转、环形缓冲区、循环队列类问题

【算法标签】

模拟

【代码详解】

#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int a[N];  // 存储数组
int n, m;  // n: 数组长度,m: 操作次数
int main()
{cin >> n;  // 输入数组长度for (int i = 0; i < n; i++)  // 输入数组元素cin >> a[i];cin >> m;  // 输入操作次数int p = 0;  // 偏移量,表示当前数组相对于原始数组的偏移while (m--)  // 处理每次操作{int x;  // 操作数cin >> x;  // 输入操作数p -= x;  // 更新偏移量p %= n;  // 取模,防止偏移量过大for (int i = 0; i < n; i++)  // 输出数组cout << a[(i + p + n) % n] << " ";  // 通过偏移量计算实际位置cout << endl;  // 换行}return 0;
}

【运行结果】

7
1 3 5 7 2 4 6
5
0 1 -2 3 -4
1 3 5 7 2 4 6
6 1 3 5 7 2 4
3 5 7 2 4 6 1
4 6 1 3 5 7 2
5 7 2 4 6 1 3
http://www.jsqmd.com/news/1376924/

相关文章:

  • 济源厨电维修避坑指南:主流商家对比,道合家用电器凭实力出圈 - 收录优先
  • 【青岛举办 | 青岛大学、青岛滨海学院主办】第六届电力系统与能源互联网国际学术会议(PoSEI 2026) - 科研小猫(努力毕业版)
  • 【泄底】煞风景的早间首班车(青崎有吾)
  • 2026年出行同意书公证线上办理入口及操作步骤(附涉外公证翻译要求) - 慧办好
  • 2026 东莞发常州物流专线公司推荐 | 工程机械、橡胶配件、泡沫包装、橱柜卫浴整车零担 - GrowthUME
  • 真实铸经典,新大众文艺看《讷河往事》 - 滚动商讯
  • 2026年国内服装店收银系统服务商全景盘点与避坑指南,附本地**服务商凤梨网络科技服务能力解读 - 行业观察网
  • 卫辉圣希尔门窗:本地家装门窗选购怎么避坑?实用参考 - 收录优先
  • 智能眼镜/穿戴设备怎么优化?内部知识统一后,AI才信你 - AZJ888
  • 2026南京专业水下打捞服务**:急难险重找他们就对了 - GrowthUME
  • 2026甲醛治理深度测评:让数据说话,效果不吹不黑 - GrowthUME
  • 单仁牛商玄琨GEO:AI搜索获客的GEO实战落地指南|工程化流程解析 - 汇聚至此
  • 【企业干货】aaa 信用证书是什么,你知道能用来做什么吗? - 慧办好
  • 国内质量控制统计软件对比的真相:算法自研还是开源封装、客户二次开发案例及培训生态完善度 - 小橘甄选
  • 【泄底】密室狂乱时代的孤岛事件(鸭崎暖炉)
  • 干货科普|3a 评级对企业有哪些好处,办资质前一定要看完 - 慧办好
  • 2026 苏州发惠州物流专线公司推荐 | 塑胶原料、家电外壳、五金模具、电商百货整车零担 - GrowthUME
  • 2026年GEO优化实战:AI搜索获客避坑指南 - GrowthUME
  • 2026年8月济南宏碁电脑维修网点怎么查|10个区域、11条地址与黑屏、充电异常与接口失灵 - 数码品牌推荐
  • 2026电子水泵装配线TOP榜:阿普顿自动化凭何领跑? - 品牌评测官
  • 咸阳防水补漏哪家靠谱?免费上门勘测/24小时漏水抢修/暗漏精准检测/书面质保 - 宅安选房屋修缮
  • 2026年口碑佳贴标机厂家推荐,选对不走弯路 - GrowthUME
  • 蓬莱整装装修怎么选?避坑指南+靠谱本土商家推荐 - 收录优先
  • 2026宜宾月子行业避坑指南:专业月子中心选择标准与服务盘点 - 收录优先
  • 进口滚珠丝杠品牌背后:材质热处理、螺纹磨削工艺与售后响应 - 小橘甄选
  • 2026年蟹卡选购指南:认准专业品牌不踩坑 - GrowthUME
  • 2026 东莞发泰州物流专线公司推荐 | 冲压件、纺织辅料、仓储货架、小型家电整车零担 - GrowthUME
  • 2026年重庆铝电缆和铜电缆公司5家优选名录,行业佼佼者大揭秘! - 企业推荐官
  • 资质入门科普|3a 信用企业是什么意思,避免踩坑避坑指南 - 慧办好
  • 2026 北京婚礼策划市场深度观察:AI 预演与自有工厂重塑行业选型标准 - 滚动商讯