Comment utiliser gracieusement les doubles pointeurs --- en vous donnant un tableau de nombres et une valeur de val, vous devez supprimer tous les éléments dont la valeur est égale à val en place et renvoyer la nouvelle longueur du tableau supprimé.

Sujet: Étant donné un tableau de nombres et une valeur de val, vous devez supprimer tous les éléments dont la valeur est égale à val en place et renvoyer la nouvelle longueur du tableau supprimé.

N'utilisez pas d'espace de tableau supplémentaire, vous devez uniquement utiliser l'espace supplémentaire O (1) et modifier le tableau d'entrée in-situ.

L'ordre des éléments peut être modifié. Vous n'avez pas besoin de considérer les éléments du tableau au-delà de la nouvelle longueur.

Solution 1: Parcourez le tableau afin que les éléments du tableau égaux à cette valeur soient écrasés jusqu'à ce que le tableau soit parcouru.

class Solution {
    
    
    public int removeElement(int[] nums, int val) {
    
    
       int i=0;
       for(int j=0;j<nums.length;j++){
    
    
           if(nums[j]!=val){
    
    
               nums[i]=nums[j];
               i++;
           }
       }
       return i;
    }
    
}

Idée 2:
Cette méthode, bien sûr, peut parcourir le tableau le moins possible, de sorte que les deux pointeurs pointent respectivement vers le début et la fin du tableau. Le pointeur précédent est parcouru vers l'arrière, et si un élément égal à val est rencontré, il est échangé avec le tableau suivant
. Jusqu'à ce que les deux pointeurs se rencontrent.

class Solution {
    
    
    public int removeElement(int[] nums, int val) {
    
    
       int i=0;
       int j=nums.length;
       while(i<j){
    
    
           if(nums[i]==val){
    
    
               nums[i]=nums[j-1];
               j--;
           }else{
    
    
               i++;
           }
       }
       return j;
    }
    
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43815275/article/details/113098668
conseillé
Classement