leecode轮转数组
// 解法一,将最后一个数字存在临时变量temp中,将数组中的值全部后移一位
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution { public void rotate( int [] nums, int k) { int temp; for ( int j = 1 ;j<=k;j++){ temp = nums[nums.length - 1 ]; for ( int i = nums.length - 1 ;i > 0 ; i--){ nums[i] = nums[i- 1 ]; } nums[ 0 ] =temp; } } } |
1 | 将数组向后移动一位的写法,如果从 0 开始会使前面的值被覆盖掉。 |
1 2 3 4 | for ( int i = nums.length - 1 ;i > 0 ; i--){ nums[i] = nums[i- 1 ]; } nums[ 0 ] =temp; |
解法二:引入新的数组,进行映射
注意向右移动n位 对应的映射方法 nums[(i+k) % length] = newArr[i]
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution { public void rotate( int [] nums, int k) { int [] newArr = new int [nums.length]; for ( int i = 0 ;i < nums.length;i++){ newArr[i] = nums[i]; } for ( int i = 0 ;i < nums.length;i++){ nums[(i+k)%nums.length] = newArr[i]; } } } |
解法三:反转数组,先将全部全部数组反转,然后反转前k个,再反转后k个
不要使用for循环:在传入y时,y/2会出现强转现象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Solution { public void rotate( int [] nums, int k) { k %= nums.length; reverse(nums, 0 ,nums.length- 1 ); reverse(nums, 0 ,k- 1 ); reverse(nums,k,nums.length - 1 ); } public void reverse( int [] nums, int x, int y){ int temp = 0 ; while ( x < y){ temp = nums[y]; nums[y] = nums[x]; nums[x] = temp; x++; y--; } } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库