Back home

ARTES #026

ARTES #026

##ARTES 026 este es el articulo 26

Pregunta sobre el algoritmo del algoritmo

646. Cadena de par más larga

Dificultad: Media

Proporcione pares de números n. En todo par de números, el primer número siempre es menor que el segundo.

Ahora, definimos una siguiente relación. Si y solo si b < c, el par de números (c, d) puede seguir a (a, b). Usamos esta forma para construir una cadena de pares de números.

Dado un conjunto de pares, encuentre la longitud de la cadena de pares más larga que se pueda formar. No es necesario utilizar todos los pares, puedes elegir algunos de ellos en cualquier orden para construir.

Ejemplo:

输入: [[1,2], [2,3], [3,4]]
输出: 2
解释: 最长的数对链是 [1,2] -> [3,4]

Nota:

  1. El número de pares de números dados está en el rango [1, 1000].

Solución

Idioma: C

#define maxn 1005
struct Pair{
    int begin;
    int end;
} pair[maxn];

int cmp(const void* a, const void* b){
    struct Pair* x = (struct Pair*)a;
    struct Pair* y = (struct Pair*)b;
    if(x->end == y->end) return x->begin - y->begin;
    return x->end - y->end;
}

void matrixToStruct(int** pairs, int row){
    for(int i = 0;i < row;i++){
        pair[i].begin = pairs[i][0];
        pair[i].end = pairs[i][1];
    }
}

int findLongestChain(int** pairs, int pairsRowSize, int pairsColSize) {
    int row = pairsRowSize;
    int col = pairsColSize;
    
    matrixToStruct(pairs, row);
    qsort(pair, row, sizeof(struct Pair), cmp);
    
    int cnt = 1;
    for(int i = 1, k= 0;i < row;i++){
        if(pair[i].begin > pair[k].end){
            cnt++;
            k = i;
        }
    }
    return cnt;
}

198. Robo

Dificultad: Fácil

Eres un ladrón profesional que planea robar casas en la calle. Hay una cierta cantidad de efectivo escondida en cada habitación. El único factor de restricción que afecta a su robo es que las casas adyacentes estén equipadas con sistemas antirrobo interconectados. Si los ladrones irrumpen en dos casas adyacentes la misma noche, el sistema activará la alarma automáticamente.

Dada una serie de números enteros no negativos que representan la cantidad de dinero almacenada en cada casa, calcula la cantidad máxima de dinero que puedes robar sin activar el dispositivo de alarma.

Ejemplo 1:

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。```

**Ejemplo 2:**

输入: [2,7,9,3,1] 输出: 12 解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。   偷窃到的最高金额 = 2 + 9 + 1 = 12 。



#### Solución

Idioma: **C**


//方法一 递归法 int rob(int* nums, int numsSize) { if (numsSize <=0) { return 0; }

if (numsSize==1) {
    return nums[0];
}
int r1= rob(nums,numsSize-2) +  nums[numsSize - 1];
int r2= rob(nums,numsSize-1) ;
if (r1 > r2) {
    return r1;
}
return r2;

}



//方法二 备忘录递归法 int re[10000] = {-1};

int rob1(int* nums, int numsSize) {

if (numsSize <=0) {
    return 0;
}

if (numsSize==1) {
    return nums[0];
}

if (re[numsSize] >-1) {
    return re[numsSize];
}

int r1= rob1(nums,numsSize-2) +  nums[numsSize - 1];
int r2= rob1(nums,numsSize-1) ;
if (r1 > r2) {
    re[numsSize] = r1;
    return r1;
}

re[numsSize] = r2;
return r2;

}

int rob(int* nums, int numsSize){ for (int i=0; i<10000; i++) { re[i] = -1; } return rob1(nums, numsSize); }




```c
//方法三 动态规划
int rob(int* nums, int numsSize){
    if (numsSize <=0) {
        return 0;
    }

    if (numsSize==1) {
        return nums[0];
    }
    
    int r0 = nums[0];
    int r1 = nums[1];
    int sum = r0 > r1 ? r0 : r1;
   
    
    for (int i = 2; i < numsSize; i++) {
        r1 = r0 + nums[i];
        r0 = sum;
        sum = r0 > r1 ? r0 : r1;
    }
    
    
    return sum;
}

Revisión

El artículo aquí habla sobre el proceso de búsqueda de empleo de un estadounidense, y finalmente obtuvo un salario anual de 300.000 dólares estadounidenses. El nivel salarial del emperador estadounidense es realmente alto. https://dandan2009.github.io/2019/03/01/how-I-negotiated-a-job-offer-in-silicon-valley/

Consejos

Después de que nuestro proyecto realmente crezca, a medida que el negocio se repita, habrá muchas clases inútiles, es decir, clases a las que ninguna clase hace referencia. Estas clases harán que el paquete de instalación se haga más grande, por lo que es necesario limpiarlo. Hay un script https://github.com/dblock/fui,很实用, en github También es muy sencillo de utilizar: Instalación: instalación de gemas fui

Recupere clases no utilizadas en el directorio actual:

fui find

También hay eliminación directa y otras funciones, puedes consultarla para obtener más detalles.

Presta atención al usarlo. Las clases a las que otras clases no hacen referencia también pueden resultar útiles. Por ejemplo, si se implementa el método de carga, todos saben que el método de carga es un método que se llama automáticamente cuando se inicia la aplicación. Si hay alguna lógica empresarial escrita en él, si se elimina, causará problemas. He ignorado esos errores. Por lo tanto, es mejor estar familiarizado con la lógica empresarial al eliminar clases.

Compartir

Cómo interceptar fallos en aplicaciones de iOS, prevenir fallos y reducir las tasas de fallos. La idea actual es familiarizarse con la capa inferior del sistema iOS, es decir, el sistema operativo. Familiarizarse con el sistema operativo requiere un estudio profundo del lenguaje C y C++ para mejorar su propio patrón. Básicamente, esta pregunta se refiere a familiarizarse con los conceptos básicos. Sólo cuando esté familiarizado con los principios básicos, podrá encontrar fundamentalmente soluciones a los problemas cuando los encuentre.