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--;
        }
    }
}
posted @   NOE42  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示