ARTES #026
ARTES #026
ARTES 026
Este é o artigo 26
Pergunta sobre algoritmo de algoritmo
646. Cadeia de pares mais longa
Dificuldade: Média
Forneça pares de números n. Em cada par de números, o primeiro número é sempre menor que o segundo número.
Agora, definimos um seguinte relacionamento. Se e somente se b < c, o par de números (c, d) pode seguir (a, b). Usamos esta forma para construir uma cadeia de pares de números.
Dado um conjunto de pares, encontre o comprimento da maior cadeia de pares que pode ser formada. Você não precisa usar todos os pares, você pode escolher alguns deles em qualquer ordem para construir.
Exemplo:
输入: [[1,2], [2,3], [3,4]]
输出: 2
解释: 最长的数对链是 [1,2] -> [3,4]
Nota:
- O número de determinados pares de números está no intervalo [1, 1000].
Solução
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. Roubo
Dificuldade: Fácil
Você é um ladrão profissional que planeja roubar casas ao longo da rua. Há uma certa quantia de dinheiro escondida em cada quarto. O único factor de restrição que afecta o seu roubo é que as casas adjacentes estão equipadas com sistemas anti-roubo interligados. Se duas casas adjacentes forem invadidas por ladrões na mesma noite, o sistema irá alarmar automaticamente.
Dada uma série de números inteiros não negativos que representam a quantidade de dinheiro armazenada em cada casa, calcule a quantidade máxima de dinheiro que você pode roubar sem acionar o dispositivo de alarme.
Exemplo 1:
输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。```
**Exemplo 2:**
输入: [2,7,9,3,1] 输出: 12 解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
#### Solução
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;
}
Revisão
O artigo aqui fala sobre o processo de procura de emprego de um americano, que finalmente conseguiu um salário anual de 300.000 dólares americanos. O nível salarial do imperador americano é realmente alto. https://dandan2009.github.io/2019/03/01/how-I-negotiated-a-job-offer-in-silicon-valley/
Dicas
Depois que nosso projeto realmente crescer, à medida que o negócio for iterando, haverá muitas classes inúteis, ou seja, classes que não são referenciadas por nenhuma classe. Essas classes farão com que o pacote de instalação fique maior, por isso é necessário limpá-lo. Existe um script https://github.com/dblock/fui,很实用, no github Também é muito simples de usar: Instalação: gem instalar fui
Recuperar classes não utilizadas no diretório atual:
fui find
Há também exclusão direta e outras funções, você pode conferir para obter detalhes.
Preste atenção ao usá-lo. Classes que não são referenciadas por outras classes também podem ser úteis. Por exemplo, se o método load for implementado, todos sabem que o método load é um método que é chamado automaticamente quando o APP é iniciado. Se houver alguma lógica de negócios escrita nele, se for excluída, causará problemas. Eu ignorei esses erros. Portanto, é melhor estar familiarizado com a lógica de negócios ao excluir classes.
Compartilhar
Como interceptar falhas em aplicativos iOS, evitar falhas e reduzir as taxas de falhas. A ideia atual é conhecer a camada inferior do sistema iOS, ou seja, o sistema operacional. Estar familiarizado com o sistema operacional requer um estudo aprofundado da linguagem C e C++ para melhorar seu próprio padrão. Esta questão resume-se essencialmente a familiarizar-se com o básico. Somente quando você estiver familiarizado com os princípios básicos, poderá encontrar fundamentalmente soluções para os problemas quando os encontrar.
What to read next
Want more posts about ARTS?
Posts in the same category are usually the best next step for reading more on this topic.
View same categoryWant to keep following #iOS?
Tags are useful for related tools, specific problems, and similar troubleshooting notes.
View same tagWant to explore another direction?
If you are not sure what to read next, return to the homepage and start from categories, topics, or latest updates.
Back home