翻转法实现旋转数组
简介:记录旋转数组的一种奇妙实现方法
1.题目
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
2.思路
设原数组为{1,2,3,4,5,6,7},k=3,目标为{5,6,7,1,2,3,4,5};
首先翻转整个数组得{7,6,5,4,3,2,1};
再翻转前k个数得{5,6,7,4,3,2,1};
最后翻转坐标为[k]到[n-1]的数组得{5,6,7,1,2,3,4};
3.时空复杂度
时间复杂度:O(n);
空间复杂度:O(1);
4.code
void rotate(vector<int>& nums, int k) { int n=nums.size(); //优化:k等于数组长度n时,右移k等价于不移动,故可以通对k取余来优化算法 k=k%n; //整体翻转 reverse(nums,0,n-1); //翻转前k个数 reverse(nums,0,k-1); //翻转后面的数 reverse(nums,k,n-1); } //翻转一段数组的实现 void reverse(vector<int>& nums,int start,int end){ while(start<end){ swap(nums[start],nums[end]); start+=1; end-=1; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具