【LeetCode-中等题】189. 轮转数组

题目

【LeetCode-中等题】189. 轮转数组_第1张图片

题解一:开辟数组 取模运算寻找位置(i+k)mod n =新位置

思路:通过,开辟数组 取模运算寻找新位置------位置(i+k)mod n =新位置
【LeetCode-中等题】189. 轮转数组_第2张图片

int[] newNums = new int[nums.length];
    for(int i = 0;i<nums.length;i++){
        newNums[(i+k)%nums.length] = nums[i];
    }
     for(int i = 0;i<nums.length;i++){
         nums[i] = newNums[i];
     }

题解二:数组翻转

思路:
1、先全部翻转
2、在根据k 的值 对k-1 的两边区域进行翻转
3、注意 k如果> 数组长度 就会出现下标越界,所以需要开始就k对数组长度取模 k %=n

【LeetCode-中等题】189. 轮转数组_第3张图片
在这里插入图片描述

// 方法二  数组翻转
    // k = 3  n=7       1 2 3 4 | 5 6 7
    //                    7 6 5 | 4 3 2 1(全部翻转)
    //                    5 6 7 | 1 2 3 4(以k-1为界分开翻转)
   
        int length = nums.length;
        k %= length;//这一步很关键,如果k>lenght   会出现数组下标越界问题,所以需要取模
        revese(0,length-1,nums);
        revese(0,k-1,nums);
        revese(k,length-1,nums);
    }
    public void revese(int begin,int end,int[] nums) {
     
        while(begin < end){
        int   temp = nums[begin] ;
        nums[begin] = nums[end];
        nums[end] = temp;
        begin ++;
        end --;
        }

你可能感兴趣的:(#,中等题,力扣,leetcode,算法,职场和发展)