Hebilla ejercicio 2 (10 preguntas)

contenido

1. Eliminar duplicados en una matriz ordenada

2. Eliminar elementos

 3. Buscar posición de inserción

  4. Implementar strStr()

5. (6) transformación en forma de Z

 6.(19) Eliminar el nodo N de la parte inferior de la lista enlazada

7. (23) Combinar K listas enlazadas ascendentes

8. (25) Un conjunto de K listas enlazadas invertidas

9. (58) La longitud de la última palabra

10. (66) más uno


1. Eliminar duplicados en una matriz ordenada

Dada una matriz ordenada de números, elimine los elementos repetidos en su lugar para que cada elemento aparezca solo una vez y devuelva la nueva longitud de la matriz eliminada.

No use espacio de matriz adicional, debe modificar la matriz de entrada en el lugar y hacerlo con O (1) espacio adicional

 
Ejemplo 1:

Entrada: nums = [1,1,2]
Salida: 2, nums = [1,2]
Explicación: la función debe devolver una nueva longitud de 2, y los primeros dos elementos de la matriz original nums se modifican a 1, 2 . No es necesario considerar los elementos de la matriz más allá de la nueva longitud.
Ejemplo 2:

Entrada: nums = [0,0,1,1,1,2,2,3,3,4]
Salida: 5, nums = [0,1,2,3,4]
Explicación: La función debe devolver el nuevo length 5 , y los primeros cinco elementos de la matriz original nums se modifican a 0, 1, 2, 3, 4 . No es necesario considerar los elementos de la matriz más allá de la nueva longitud.
 

insinuación:

0 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums están en orden ascendente

import java.util.ArrayList;
import java.util.List;

public class removeDuplicates {

    public static void main(String[] args) {
        int[] nums={1,1,2,5,6,7,7};
  int [] n2=removeDuplicates(nums);
       for(int n:n2){
           System.out.println(n);
       }
    }
    public static int[] removeDuplicates(int[] nums) {


        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (i == 0) {
                list.add(nums[0]);
            }
           if(i>=1){

               if (list.get(list.size()-1) != nums[i]) {

                   list.add(nums[i]);

               }

           }

        }
        for(int i=0;i<list.size();i++){
            nums[i]=list.get(i);
        }
        for(int i=list.size();i<nums.length;i++){
            nums[i]=0;

        }


        return nums;
    }
}

2. Eliminar elementos

Dada una matriz nums y un valor val, debe eliminar todos los elementos cuyo valor sea igual a val en su lugar y devolver la nueva longitud de la matriz eliminada.

En lugar de usar espacio de matriz adicional, debe usar solo O (1) espacio adicional y modificar la matriz de entrada en su lugar.

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

Ejemplo 1:

Entrada: nums = [3,2,2,3], val = 3
Salida: 2, nums = [2,2]
Explicación: la función debe devolver una nueva longitud de 2, y los dos primeros elementos en nums son ambos 2 . No necesita considerar elementos en la matriz más allá de la nueva longitud. Por ejemplo, la nueva longitud devuelta por la función es 2, y nums = [2,2,3,3] o nums = [2,2,0,0] también se consideraría la respuesta correcta.
Ejemplo 2:

Entrada: nums = [0,1,2,2,3,0,4,2], val = 2
Salida: 5, nums = [0,1,4,0,3]
Explicación: La función debe devolver el nuevo longitud 5, y los primeros cinco elementos en números son 0, 1, 3, 0, 4. Tenga en cuenta que estos cinco elementos pueden estar en cualquier orden. No necesita considerar elementos en la matriz más allá de la nueva longitud.
 

insinuación:

0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100

class Solution {
    public int removeElement(int[] nums, int val) {
    int n=0;
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {

                if (val != nums[i]) {

                    list.add(nums[i]);
                    n++;
                }


        }
        for(int i=0;i<list.size();i++){
            nums[i]=list.get(i);
        }


        return n;
    }
}

 
3. Buscar posición de inserción

Dada una matriz ordenada y un valor de destino, encuentre el valor de destino en la matriz y devuelva su índice. Si el valor de destino no existe en la matriz, devuelve la posición en la que se insertará en orden.

Utilice un algoritmo O(log n).

Ejemplo 1:

Entrada: nums = [1,3,5,6], objetivo = 5
Salida: 2
Ejemplo 2:

Entrada: nums = [1,3,5,6], objetivo = 2
Salida: 1
Ejemplo 3:

Entrada: nums = [1,3,5,6], objetivo = 7
Salida: 4
Ejemplo 4:

Entrada: nums = [1,3,5,6], objetivo = 0
Salida: 0
Ejemplo 5:

Entrada: nums = [1], destino = 0
Salida: 0
 

insinuación:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums es una matriz ascendente sin elementos duplicados
-104 <= objetivo <= 104

class Solution {
    public int searchInsert(int[] nums, int target) {

        int n=-1;
        for(int i=0;i<nums.length;i++){
            if(nums[i]==target){
                n=i;
                break;
            }

        }
        if(n<0) {
            for (int i = nums.length - 1; i >= 0; i--) {
                if (target > nums[i]) {
                    n = i+1;
                    break;
                } else {
                    n = 0;
                }

            }
        }
         return n;
    }
}

  4. Implementar strStr()

Implemente la función strStr().

Dadas dos cadenas pajar y aguja, encuentre la primera posición de la cadena aguja en la cadena pajar (el subíndice comienza desde 0). Devuelve -1 si no está presente.

Ejemplo 1:

Entrada: pajar = "hola", aguja = "ll"
Salida: 2
Ejemplo 2:

Entrada: pajar = "aaaa", aguja = "bba"
Salida: -1
Ejemplo 3:

Entrada: pajar = "", aguja = ""
Salida: 0
 

insinuación:

0 <= pajar.longitud, aguja.longitud <= 5 * 104
pajar y aguja consisten solo en caracteres ingleses en minúsculas

class Solution {
    public int strStr(String haystack, String needle) {
      return haystack.indexOf(needle);


    }
}

5. (6) transformación en forma de Z

Organiza una cadena dada en zigzag de arriba a abajo, de izquierda a derecha de acuerdo con el número dado de filas numRows.

Por ejemplo, cuando la cadena de entrada es "PAYPALISHIRING" y el número de líneas es 3, la disposición es la siguiente:

Después de P A H N
APLSIIG
Y I R
, su salida debe leerse línea por línea de izquierda a derecha, lo que da como resultado una nueva cadena, como: "PAHNAPLSIIGYIR".

Implemente esta función que transforma una cadena con un número específico de líneas:

Ejemplo 1:

Entrada: s = "PAYPALISHIRING", numRows = 3
Salida: "PAHNAPLSIIGYIR"
Ejemplo 2:
Entrada: s = "PAYPALISHIRING", numRows = 4
Salida: "PINALSIGYAHRPI"
Explicación:
P I N
A LS IG
YA HR
P I
Ejemplo 3:

Entrada: s = "A", numRows = 1
Salida: "A"
 

insinuación:

1 <= s.length <= 1000
s consta de letras inglesas (minúsculas y mayúsculas), ',' y '.'
1 <= numRows <= 1000

class Solution {
    public String convert(String s, int numRows) {

        if(s.length()<=numRows||numRows<=1){
            return s;
        }

        String convert="";
        int conums= column(s,numRows);
        Character arrays[][]=new Character[numRows][conums];
        int n=0;
        int k=0;
           for(int j=0;j<conums;j++){
           for (int i = 0; i < numRows; i++) {
               if(k>=s.length()){
                   break;
               }
               if(n==0||n==numRows-1){
                   arrays[i][j]=s.charAt(k);
                   k++;
                   if(n==numRows-1&&i==numRows-1){
                       n=0;
                   }
               }
               else {
                   arrays[numRows-n-1][j] = s.charAt(k);
                   k++;
                   break;
               }

           }
           n++;
           }


       for(int i=0;i<numRows;i++){
           for(int j=0;j<conums;j++){
               if(arrays[i][j]!=null) {
                   convert += arrays[i][j];
               }

           }
    
       }
    return convert;
    }

    
    public  int column(String s, int numRows){

        int cycle=s.length()/(numRows+numRows-2);
        if(cycle==0)
          return 1+s.length()%numRows;
        int remainder=s.length()%(numRows+numRows-2);
        int remainder2=0;
        if(remainder>0){
            if(remainder<numRows){
                remainder2=1;
            }
            else {
                remainder2=remainder%numRows+1;
            }
        }

        return (numRows-1)*cycle+remainder2;
    }
}

 

 6.(19) Eliminar el nodo N de la parte inferior de la lista enlazada

 

Dada una lista vinculada, elimine el penúltimo  n nodo de la lista vinculada y devuelva el nodo principal de la lista vinculada.

Avanzado: ¿Puede intentar implementarlo con un escaneo?

Ejemplo 2:

Entrada: cabeza = [1], n = 1
Salida: []
Ejemplo 3:

Entrada: cabeza = [1,2], n = 1
Salida: [1]
 

insinuación:

El número de nodos en la lista enlazada es sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
  
        int size=size(head);
       ListNode listNode=new ListNode();
       listNode=head;
       if(size==1&&n==1){
           return null;
       }
      else if(n==size){
                return head.next;
       }
      else if(n==1){
         for(int i=0;i<size;i++){


                 if(i==size-2){
                     head.next=null;
                     break;
                 }
                head = head.next;

         }
      }
      else {

           for(int i=1;i<size;i++){

               if(i==size-n){
                   head.next=head.next.next;
                   break;
               }
               head = head.next;

           }

       }




   return listNode;

    }

      public int size(ListNode head){

       int n=1;
       while (true){
           if(head.next==null){
               break;
           }
           head= head.next;
           n++;
       }

       return n;
    }
}

7. (23) Combinar K listas enlazadas ascendentes

Se le proporciona una matriz de listas vinculadas, cada lista vinculada ya ordenada en orden ascendente.

Combine todas las listas vinculadas en una lista vinculada ascendente y devuelva la lista vinculada combinada.

Ejemplo 1:

Entrada: listas = [[1,4,5],[1,3,4],[2,6]]
Salida: [1,1,2,3,4,4,5,6]
Explicación: lista enlazada matriz De la siguiente manera:
[
  1->4->5,
  1->3->4,
  2->6
]
Combinarlos en una lista enlazada ordenada.
1->1->2->3->4->4->5->6
Ejemplo 2:

Entrada: listas = []
Salida: []
Ejemplo 3:

Entrada: listas = [[]]
Salida: []
 

insinuación:

k == listas.longitud
0 <= k <= 10^4
0 <= listas[i].longitud <= 500
-10^4 <= listas[i][j] <= 10^4
listas[i] 按升序 排列
lists[i].length 的总和不超过 10^4

 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {

        ListNode listNode=null;
        for(int i=0;i<lists.length;i++){
              listNode=mergeTwoKLists(listNode,lists[i]);
        }

        return  listNode;
    }

     public ListNode mergeTwoKLists(ListNode list1,ListNode list2) {

        if(list1==null||list2==null){
            return  list1!=null? list1:list2;
        }

        ListNode listNode=new ListNode();
        ListNode head=listNode;
        while (list1!=null&&list2!=null){

            if(list1.val<list2.val){
                listNode.next=list1;
                list1=list1.next;
            }
            else {
                listNode.next=list2;
                list2=list2.next;
            }
          listNode=listNode.next;
        }
       listNode.next=(list1!=null?list1:list2);

        return  head.next;
    }


}

8. (25) Un conjunto de K listas enlazadas invertidas

Se le proporciona una lista vinculada, y cada grupo de k nodos se invierte, y devuelva la lista vinculada invertida.

k es un entero positivo cuyo valor es menor o igual que la longitud de la lista enlazada.

Si el número total de nodos no es un múltiplo entero de k, mantenga los últimos nodos restantes en su orden original.

Avanzado:

¿Puedes diseñar un algoritmo que use solo espacio adicional constante para resolver este problema?
No puede simplemente cambiar el valor dentro del nodo, debe hacer el intercambio de nodos.

Ejemplo 3:

Entrada: cabeza = [1,2,3,4,5], k = 1
Salida: [1,2,3,4,5]
Ejemplo 4:

Entrada: cabeza = [1], k = 1
Salida: [1]
Pista:

El número de nodos en la lista está en el rango sz
1 <= sz <= 5000
0 <= Node.val <= 1000
1 <= k <= sz

 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public List<Integer> list2=new ArrayList<>();
    public ListNode reverseKGroup(ListNode head, int k) {
   
         int size=size(head);
         if(size==1&&k==1){
             return head;
         }
          List<Integer> list=new ArrayList<>();
          ListNode listNode=head;
          ListNode listNode2=head;
          int n=0;
         for(int i=0;i<size;i++){
             if(i==0) {
                 list.add(head.val);
                 head=head.next;
             }
             else {
                 list.add(head.val);
                 head=head.next;
             }
             n++;
             if(n==k){
                 addlist(list);
                 list.clear();
                 n=0;
             }
             if(i==size-1&&n<k){
                 addlist2(list);
             }
         }
         // System.out.println("ddd"+list2.size());
          for(int i=0;i<size;i++){
              if(i==0) {
                  listNode.val=list2.get(i);
                  listNode= listNode.next;
              }
              else {
                  listNode.val=list2.get(i);
                  listNode= listNode.next;
              }
          }

 return  listNode2;
    }

    
   public static int size(ListNode head){

        int n=1;
        while (true){
            if(head.next==null){
                break;
            }
            head= head.next;
            n++;
        }

        return n;
    }

    public  void addlist(List<Integer> list){

        for(int i=list.size()-1;i>=0;i--){
            list2.add(list.get(i));
        }
    }
    public  void addlist2(List<Integer> list){

        for(int i=0;i<list.size();i++){
            list2.add(list.get(i));
        }
    }
}

9. (58) La longitud de la última palabra

 

Se le da una cadena  sque consta de varias palabras separadas por algunos caracteres de espacio antes y después de ellas. Devuelve la longitud de la última palabra de la cadena.

Una palabra  es la subcadena más grande que consta de solo letras y no contiene caracteres de espacio.

Ejemplo 1:

Entrada: s = "Hola Mundo"
Salida: 5
Ejemplo 2:

Entrada: s = "llévame a la luna"
Salida: 4
Ejemplo 3:

Entrada: s = "luffy sigue siendo joyboy"
Salida: 6
 

insinuación:

1 <= s.length <= 104
s Solo las letras y espacios en inglés ' ' constan
de al menos una palabra en s

class Solution {
    public int lengthOfLastWord(String s) {
     String result="";
        boolean b=false;
        for(int i=s.length()-1;i>=0;i--){
            if(s.charAt(i)!=' '){
                result+=s.charAt(i);
                b=true;
            }

            if(s.charAt(i)==' '&&b){             
                    break;             
            }
        }
        return result.length();
    }
}

 

10. (66) más uno

Dado un número entero no negativo representado por una matriz no vacía de números enteros, agregue uno a ese número.

El dígito más alto se almacena en la primera posición de la matriz y cada elemento de la matriz almacena solo un número.

Puede suponer que este entero no comenzará con cero excepto el entero 0.

Ejemplo 1:

Entrada: dígitos = [1,2,3]
Salida: [1,2,4]
Explicación: La matriz de entrada representa el número 123.
Ejemplo 2:

Entrada: dígitos = [4,3,2,1]
Salida: [4,3,2,2]
Explicación: La matriz de entrada representa el número 4321.
Ejemplo 3:

Entrada: dígitos = [0]
Salida: [1]
 

insinuación:

1 <= dígitos.longitud <= 100
0 <= dígitos[i] <= 9

 

class Solution {
    public int[] plusOne(int[] digits) {

         if(digits.length<2){
            if(digits[0]+1>9){
               int digits2[]={1,0};
               return digits2;
            }
            else {
                digits[0]=digits[0]+1;
                return digits;
            }

        }
        else {
            if(digits[digits.length-1]+1<=9){
                digits[digits.length-1]=digits[digits.length-1]+1;
                
                return digits;
            }
            else {
              
                for(int i=digits.length-1;i>=0;i--){
                    if(i>0) {
                        if (digits[i] + 1 > 9) {
                            digits[i] = 0;
                            digits[i - 1] = digits[i - 1] + 1;
                            if( digits[i - 1]<=9){
                                break;
                            }
                        }
                    }

                }

                if(digits[0]>9){
                        int [] digits2=new int[digits.length+1];
                        for(int j=digits.length;j>0;j--){
                            digits2[j]=0;
                        }
                        digits2[0]=1;
                       return digits2;
                }
                else {
                    return digits;
                }


            }

        }



    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_44716544/article/details/120399396
Recomendado
Clasificación