Cómo usar los punteros dobles con gracia --- dándole una matriz de nums y un valor de val, necesita eliminar todos los elementos cuyo valor sea igual a val en su lugar y devolver la nueva longitud de la matriz eliminada.

Tema: Dada una matriz de números y un valor de val, debe eliminar todos los elementos cuyo valor es igual a val en su lugar y devolver la nueva longitud de la matriz eliminada.

No use espacio adicional en la matriz, solo debe usar O (1) espacio adicional y modificar la matriz de entrada in situ.

El orden de los elementos se puede cambiar. No es necesario considerar los elementos de la matriz más allá de la nueva longitud.

Solución 1: atraviese la matriz para que los elementos de la matriz iguales a este valor se sobrescriban hasta que se atraviese la matriz.

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;
    }
    
}

Idea 2:
Este método, por supuesto, puede atravesar la matriz lo menos posible, de modo que los dos punteros apunten al principio y al final de la matriz respectivamente. El puntero anterior se atraviesa hacia atrás, y si se encuentra un elemento igual a val, se intercambia con la siguiente matriz
. Hasta que los dos punteros se encuentren.

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;
    }
    
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43815275/article/details/113098668
Recomendado
Clasificación