[Une question du jour] Likou 189. Faites pivoter le tableau

Description du titre ( portail )

Étant donné un tableau, déplacez les éléments du tableau k positions vers la droite, où k est un nombre non négatif.

Exemple 1:

输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1: [7,1,2,3,4,5,6]
向右旋转 2: [6,7,1,2,3,4,5]
向右旋转 3: [5,6,7,1,2,3,4]

Exemple 2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释: 
向右旋转 1: [99,-1,-100,3]
向右旋转 2: [3,99,-1,-100]

La description:

Pensez à autant de solutions que possible. Il existe au moins trois façons différentes de résoudre ce problème.
Il est nécessaire d'utiliser un algorithme en place avec une complexité spatiale de O (1).

Idées de résolution de problèmes

Cette question concerne la rotation d'un tableau unidimensionnel. Elle a été mentionnée auparavant lorsque le tableau bidimensionnel a été pivoté. Vous pouvez vous référer à [Question quotidienne] Likou 48. Rotation de l'image

Idée: pour qu'un tableau unidimensionnel déplace k positions vers la droite, vous pouvez retourner le premier nk-1, puis retourner le tout après nk. Une rotation de réseau unidimensionnelle peut être réalisée in situ. (La limite spécifique est déterminée en fonction de la façon dont le titre définit l'indice).
Remarque: lorsque l'élément du tableau est inférieur ou égal à 1, retournez simplement directement, lorsque la valeur de k est supérieure à la longueur du tableau, déplacez simplementk% longueur

Insérez la description de l'image ici

Code Java

class Solution {
    
    
    public void rotateHelper(int[] nums, int left, int right) {
    
    
        while (left < right) {
    
    
            int tmp = nums[left];
            nums[left] = nums[right];
            nums[right] = tmp;
            left++;
            right--;
        }
    }
    public void rotate(int[] nums, int k) {
    
    
        if (nums.length <= 1) {
    
    
            return;
        }
        k = k%nums.length;
        rotateHelper(nums, 0, nums.length-k-1);
        rotateHelper(nums, nums.length-k, nums.length-1);
        rotateHelper(nums, 0, nums.length-1);
    }
}

Code de langue C

void reverse(int* nums,int start,int end)
{
    
    
    
    for(int j=0;start<end;j++)
    {
    
    
       int tmp=nums[end];
        nums[end]=nums[start];
        nums[start]=tmp;
        start++;
        end--;
    }
    

}

void rotate(int* nums, int numsSize, int k)
{
    
    
    reverse(nums,0,numsSize-1);
   if(k>numsSize)
   {
    
    
       k%=numsSize;
   } 
    reverse(nums,0,k-1);
    reverse(nums,k,numsSize-1);
}


Je suppose que tu aimes

Origine blog.csdn.net/weixin_45532227/article/details/112346191
conseillé
Classement