ARTES #006
ARTES #006
ARTS é uma atividade iniciada por
由左耳朵耗子--陈皓: Faça pelo menos uma pergunta sobre o algoritmo leetcode toda semana, leia e comente pelo menos um artigo técnico em inglês, aprenda pelo menos uma habilidade técnica e compartilhe um artigo com opiniões e pensamentos. (Ou seja, Algoritmo, Revisão, Dica e Compartilhamento são chamados de ARTS) e persistem por pelo menos um ano.
ARTES 006
Este é o 6º artigo. Está relativamente mal escrito. Espero que fique cada vez melhor no futuro.
Pergunta sobre algoritmo de algoritmo
Pergunta 41 do algoritmo Leetcode Primeiro positivo ausente (o primeiro número positivo ausente): Dificuldade: Difícil
Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0]
Output: 3
Example 2:
Input: [3,4,-1,1]
Output: 2
Example 3:
Input: [7,8,9,11,12]
Output: 1
Note:
Your algorithm should run in O(n) time and uses constant extra space.
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
说明:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。
Ideias para resolução de problemas: De acordo com os requisitos da questão, precisamos encontrar o menor número inteiro positivo. Portanto, para um determinado array, o valor mínimo do valor de retorno é 1. Qual é o valor máximo? O valor máximo deve ser o número de elementos do array mais 1. Se você conseguir pensar nisso, o problema estará resolvido.
Minha implementação é a seguinte:
//第一次一次通过的代码 而且运行时间是0ms
int firstMissingPositive(int* nums, int numsSize) {
int i = 1;
for ( ;i<= numsSize; i++) {
int flag = 0;
for (int j = 0; j < numsSize; j++) {
int data = nums[j];
if (data ==i) {
flag =1;
break;
}
}
if (flag == 0) {
return i;
}
}
return i;
}
As duas soluções a seguir são códigos enviados por terceiros. Você pode aprender com as ideias de outras pessoas.
int firstMissingPositive1(int* nums, int numsSize) {
int *hashTable = (int*)calloc(numsSize+1,sizeof(int));
int res = 1;
for(int i=0;i<numsSize;++i){
if(nums[i]>numsSize || nums[i] < 0)
continue;
hashTable[nums[i]]++;
}
while(hashTable[res]){
res++;
}
return res;
}
int firstMissingPositive2(int* nums, int numsSize) {
int temp, i, j = 0;
for (i = 0; i < numsSize; i++)
{
while ((i != nums[i] - 1) && nums[i] > 0 && nums[i] < numsSize)
{
if ((temp = nums[nums[i] - 1]) == nums[i]) break;
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
while (nums[j] == j + 1) j++;
}
return (j + 1);
}
A solução a seguir foi extraída de 刘新宇的算法新解一书, que economiza mais espaço (para ideias específicas, você pode pesquisar no Google a nova solução de algoritmo de Liu Xinyu, há um e-book)
#define N 1000000 // 1 million #define WORD_LENGTH sizeof(int) * 8
void setbit(unsigned int* bits, unsigned int i) {
bits[i / WORD_LENGTH] |= 1<<(i % WORD_LENGTH);
}
int testbit(unsigned int* bits, unsigned int i) {
return bits[i/WORD_LENGTH] & (1<<(i % WORD_LENGTH));
}
unsigned int bits[N/WORD_LENGTH+1];
int min_free(int* xs, int n) {
int i, len = N/WORD_LENGTH+1;
for(i=0; i<len; ++i)
bits[i]=0;
for(i=0; i<n; ++i)
if(xs[i]<n)
setbit(bits, xs[i]);
for(i=0; i<=n; ++i)
if(!testbit(bits, i))
return i;
}
Revisão
Este artigo vem de: https://medium.freecodecamp.org/why-developers-should-know-how-to-write-dc35aa9b71ab <centro> <tamanho da fonte=6> Por que os desenvolvedores deveriam saber escrever </font> </center> Recentemente, encontrei um artigo de John Maeda sobre como escrever – e não codificar – é a habilidade do unicórnio do design. Isso me fez pensar sobre como a escrita desempenha um papel na vida dos desenvolvedores. Recentemente vi um artigo de John Maeda sobre como escrever - e não codificar - é a dica unicórnio do design. Isso me fez pensar sobre o papel que a escrita desempenha na vida de um desenvolvedor.
No mundo atual, orientado e cheio de dados, há muito conteúdo para consumir. Somos constantemente bombardeados por vídeos, fotos, anúncios, podcasts e artigos. Cada uma dessas mídias tem um tipo de apelo diferente e sempre parece que há uma forte concorrência para tentar atrair e reter nossa atenção.
No mundo atual, orientado e com uso intensivo de dados, há muito conteúdo para consumir. Somos constantemente bombardeados com vídeos, imagens, anúncios, podcasts e artigos. Cada uma dessas mídias tem um tipo diferente de apelo e sempre parece haver uma competição acirrada tentando atrair e reter nossa atenção.
Uma amostra dos diferentes tipos de canais de mídia disponíveis (imagem de Change Conversations).
Com a proliferação de diferentes canais de mídia nas últimas décadas, tem havido menos ênfase no conteúdo escrito e mais no visual – especificamente vídeos e imagens. De acordo com este memorando da 3M de 1997, as pessoas podem processar imagens 60.000 vezes mais rápido que texto. Nas últimas décadas, à medida que vários canais de mídia evoluíram, houve menos ênfase no conteúdo textual e mais atenção nos recursos visuais – especialmente vídeos e imagens. De acordo com um memorando de 1997 da 3M, as pessoas processam imagens 60 mil vezes mais rápido que texto.
Porém, saber escrever ainda é uma habilidade importante. As palavras podem ser uma das formas mais puras de expressar os pensamentos de alguém. As palavras podem ser apresentadas como cartas, artigos ou mensagens de texto. Um escritor irá disseminar e compartilhar seus pensamentos na forma de tinta no papel ou pixels digitalizados em uma tela. Porém, saber escrever ainda é uma habilidade importante. A linguagem é uma das formas mais puras pelas quais uma pessoa pode expressar seus pensamentos. A linguagem pode ser expressa como uma carta, um artigo ou uma mensagem de texto. Os escritores comunicam e compartilham suas ideias com tinta no papel ou pixels digitais em uma tela.
Aprendi que escrever bem pode ser um catalisador para o sucesso, seja na área de crescimento pessoal, desenvolvimento profissional ou prosperidade social. Muitas das habilidades que desenvolvi ao escrever dezenas de artigos nos últimos anos foram traduzidas em minha nova função de tempo integral como engenheiro de software na Putnam Investments.
Aprendi que uma boa escrita pode ser um catalisador para o sucesso, seja no crescimento pessoal, no desenvolvimento profissional ou na prosperidade social. Nos últimos anos, muitas das habilidades que adquiri ao escrever dezenas de artigos foram traduzidas em minha nova função de tempo integral como engenheiro de software na Putnam Investments.
Foto de Aaron Burden no Unsplash.
Como desenvolvedor, aqui estão cinco benefícios que descobri ao aprender a escrever. Como desenvolvedor, aqui estão cinco benefícios que aprendi ao aprender a escrever.
1. Escrever bem torna você um comunicador melhor (escrever bem pode torná-lo um comunicador melhor)
O benefício mais óbvio que percebi ao escrever com frequência é que escrever bem me tornou um comunicador melhor. Como humanos, confiamos principalmente em nossas palavras para transmitir nossos pensamentos e sentimentos aos outros. Ao escrever com frequência, consigo expressar meus pensamentos com mais facilidade, sem ter que me preocupar se estou usando as palavras certas, escrevendo muito ou pouco, ou sendo muito vago ou complicado. O benefício mais óbvio que percebi ao escrever com frequência é que uma boa escrita me torna um comunicador melhor. Como humanos, confiamos principalmente em nossas palavras para transmitir nossos pensamentos e sentimentos aos outros. Ao escrever regularmente, posso expressar minhas ideias com mais facilidade, sem ter que me preocupar se estou usando as palavras certas, se estou escrevendo muito ou pouco, ou se estou sendo muito vago ou complexo.
Imagem de https://zalarieunique.ru.
No trabalho, posso redigir e-mails concisos ou enviar mensagens instantâneas sem precisar recorrer a um dicionário para saber a grafia correta de uma palavra ou a um dicionário de sinônimos para parecer mais inteligente. Quando os pensamentos podem fluir livremente da sua mente para a sua mão, as palavras que saem no papel fluem com fluidez e não precisam ser manipuladas para atingir um propósito específico. No trabalho, posso redigir e-mails concisos ou enviar mensagens instantâneas sem precisar recorrer a um dicionário ou enciclopédia para parecer inteligente. Quando as ideias podem fluir livremente da sua cabeça para as suas mãos, as palavras no papel fluem suavemente sem ter que ser manipuladas para atingir um propósito específico.Escrever, como muitos outros ofícios, leva anos de prática para ser aprimorado. A melhor parte de escrever é que a melhoria é detectável. Você pode analisar trabalhos anteriores e ver melhorias visíveis ao longo do tempo. Escrever, como muitos outros ofícios, leva anos de prática para ser aprimorado. A melhor parte de escrever é que o progresso é perceptível. Você pode analisar trabalhos anteriores e ver melhorias visíveis ao longo do tempo.
2. Escrever para um público ajuda você a escrever uma documentação melhor (escrever para um público pode ajudá-lo a escrever uma documentação melhor)
Parte dos critérios para ser um bom desenvolvedor é saber comunicar requisitos e especificações técnicas a outras partes interessadas. Conhecer o seu público é uma parte importante da redação - o mesmo se aplica à comunicação com as partes interessadas ou à redação de qualquer tipo de documentação.
Parte de ser um bom desenvolvedor é saber comunicar requisitos e especificações técnicas a outras partes interessadas. Conhecer o seu público é uma parte importante da redação - e o mesmo se aplica à comunicação com as partes interessadas ou à redação de qualquer tipo de documentação.
Ao trabalhar com membros da equipe menos técnicos, você deve explicar os termos e conceitos técnicos de uma forma que faça sentido e repercuta em quem está trabalhando. Por exemplo, ao trabalhar com proprietários de produtos e designers, geralmente tento fornecer uma visão geral de alto nível de tudo o que estou trabalhando, sem me prender aos detalhes. Para designers, tento comunicar como o recurso deve ser implementado do ponto de vista de UX ou UI. Para proprietários de produtos, tento enquadrar meu trabalho na perspectiva do negócio.
Ao trabalhar com membros da equipe menos técnicos, você deve explicar os termos e conceitos técnicos de uma forma que faça sentido e ressoe com qualquer pessoa com quem você trabalha. Por exemplo, ao trabalhar com proprietários de produtos e designers, geralmente forneço uma visão geral de alto nível do que estou fazendo, sem me prender aos detalhes. Para designers, tento ilustrar como o recurso deve ser implementado do ponto de vista da experiência do usuário ou da perspectiva da UI. Para proprietários de produtos, tento organizar meu trabalho de uma perspectiva comercial.
Além disso, os desenvolvedores também precisam comunicar seu trabalho a outros desenvolvedores. Seja nomeando variáveis ou nomes de funções, escrevendo comentários embutidos ou documentando como o sistema deve funcionar em alto nível, os desenvolvedores precisam saber como escrever uma boa documentação para que o código seja compreensível e fácil de manter. Sempre que escrevo documentação, tento torná-la o mais completa possível. Qualquer desenvolvedor que trabalhe em minha base de código será capaz de entender a estrutura de alto nível e também contribuir instantaneamente (imediatamente/imediatamente) sem ter que desconstruir e fazer engenharia reversa do código.
Além disso, os desenvolvedores devem comunicar seu trabalho a outros desenvolvedores. Seja nomeando variáveis ou funções, escrevendo comentários embutidos ou documentando como um sistema deve funcionar em alto nível, os desenvolvedores precisam saber como escrever uma boa documentação para que o código seja fácil de entender e manter. Sempre que escrevo um documento, tento torná-lo o mais completo possível. Qualquer desenvolvedor que trabalhe na minha base de código entende a estrutura de alto nível e pode contribuir imediatamente, sem precisar desconstruir e fazer engenharia reversa do código.
3. Escrever faz você apreciar as idiossincrasias da programação
Em 2011, um Redditor postou no subreddit /r/programming sobre as diferenças e semelhanças entre escrita e programação. Alguns dizem que programar é semelhante a escrever, pois é uma habilidade que não é conceitualmente difícil, mas é algo que é refinado com o tempo. Outros afirmam que escrever é completamente diferente de programar, pois escrever é um esforço criativo, enquanto a programação é uma ciência mais envolvente que requer uma compreensão mais profunda dos conceitos fundamentais.
Em 2011, um usuário do reddit postou em /r/programming sobre as semelhanças e diferenças entre escrita e programação. Algumas pessoas dizem que programar é semelhante a escrever, pois é uma habilidade que não é conceitualmente difícil, mas que se torna cada vez mais refinada com o tempo. Outros acreditam que escrever e programar são completamente diferentes porque escrever é um esforço criativo, enquanto a programação é uma ciência mais complexa que requer uma compreensão mais profunda dos conceitos básicos.
O consenso geral, com pequenas divergências nas nuances de cada um, é que tanto a escrita quanto a programação requerem conhecimento básico dos fundamentos – sintaxe, estrutura e semântica. Porém, o que diferencia um amador de um veterano (experiente; veterano/veterano/veterano) em cada área é a capacidade de ser criativo e lidar com a complexidade do sistema ou tema em questão.
O consenso geral, com pequenas divergências em todos os detalhes, é que tanto a escrita quanto a programação exigem conhecimento dos fundamentos básicos – sintaxe, estrutura e semântica. Em todas as áreas, porém, o que separa os amadores dos veteranos é a sua capacidade criativa para lidar com as complexidades do sistema ou tópico em questão.
Muitas dessas ideias abordam (tocam, envolvem; tocam; falam sobre) os campos da linguística e da linguagem.
Muitas dessas perspectivas estão relacionadas aos campos da linguística e da linguagem.Escrever ensina os desenvolvedores a pensar de forma diferente. Para os desenvolvedores, escrever código pode parecer restrito, pois há um número limitado de palavras-chave, funções e bibliotecas que podem ser usadas. No entanto, as linguagens escritas permitem total liberdade de expressão de uma forma que as linguagens de programação geralmente não permitem.
Escrever ensina os desenvolvedores a pensar de forma diferente. Para desenvolvedores, escrever código pode ser restritivo devido ao número limitado de palavras-chave, funções e bibliotecas que podem ser usadas. Porém, a linguagem escrita permite uma total liberdade de expressão que as linguagens de programação geralmente não permitem.
Ted Kaminski traz à tona outro ponto interessante sobre o propósito das palavras conforme as usamos em código e em outras mídias. Ted Kaminski traz à tona outro ponto interessante quando se trata da forma como usamos palavras em código e outras mídias.
“For one, writing is meant(意味着) to be read. Code is meant to be read and changed.” -Ted Kaminski
“首先,写作是为了阅读。 代码应该被阅读和更改。“ - 泰德卡明斯基
No domínio da escrita, parece que uma dicotomia estrita foi criada ao longo do tempo para separar as preocupações dos escritores das dos leitores. A escrita parece imutável, enquanto o código é um esforço contínuo que busca melhorar (baseado em; próximo de; em) o antigo.
No campo da escrita, parece que uma dicotomia estrita foi criada ao longo do tempo, dividindo as preocupações do escritor e do leitor. A escrita parece estática (gravada em pedra), enquanto a codificação é um esforço contínuo para melhorar algo antigo.
Em muitos aspectos, escrever “criativamente” e escrever código compartilham muitas semelhanças, mas conhecer suas diferenças me faz apreciar muito mais ambos.
Em muitos aspectos, escrever de forma “criativa” e escrever código tem muitas semelhanças, mas compreender suas diferenças me fez apreciar ainda mais ambos.
4. Escrever dá a você a chance de aplicar o que aprende (escrever dá a você a chance de aplicar o que aprende)
Quando escrevo, sempre parece que estou conversando comigo mesmo. Ao terminar um livro ou descobrir algo significativo, procuro deixar meus pensamentos refletirem escrevendo um artigo sobre o que aprendi. Para mim, descobri que a melhor maneira de avançar meu conhecimento em uma área específica (especial; detalhada; única; exigente) é escrever sobre esse tópico.
Quando escrevo, sempre parece que estou conversando comigo mesmo. Quando termino de ler um livro ou descubro algo importante, tento entender isso escrevendo uma redação sobre o que aprendi. Para mim, acho que a melhor forma de aprimorar meus conhecimentos em uma determinada área é escrever sobre o assunto.
No freeCodeCamp e em muitos outros sites que fornecem tutoriais básicos de desenvolvimento, os autores escrevem sobre uma variedade de tópicos e conceitos diferentes. Parte da razão pela qual tantos voluntários dedicam seu tempo para escrever artigos não é apenas para que possam compartilhar suas experiências e ajudar outras pessoas, mas também para que possam reforçar o conhecimento adquirido sobre o tópico sobre o qual estão escrevendo.
No freeCodeCamp e em muitos outros sites que fornecem tutoriais básicos de desenvolvimento, os autores escrevem sobre uma variedade de tópicos e conceitos diferentes. Parte da razão pela qual tantos voluntários dedicam seu tempo escrevendo artigos é que eles não apenas podem compartilhar suas experiências e ajudar outras pessoas, mas também podem aprimorar seu conhecimento sobre os tópicos sobre os quais escrevem.
freeCodeCamp, um dos melhores recursos para tutoriais e artigos de desenvolvimento.
freeCodeCamp, um dos melhores recursos para tutoriais e artigos de desenvolvimento.
Quando escrevo sobre tópicos sobre os quais aprendo, geralmente conduzo (conduta; liderança vt. gestão; orientação; desempenho n. conduta; comportamento; implementação) pesquisas adicionais (adicionais, adicionais) (pesquisa; investigação) que muitas vezes resultam em fragmentos (fragmentos) de informações aos quais de outra forma não estaria exposto. perspectivas e pontos de vista que desafiam minha perspectiva inicial. Todo o processo de escrita é uma conversa viva e contínua que me permite processar as informações que encontro e fazer meus próprios julgamentos.
Quando escrevo sobre um tópico sobre o qual sei algo, muitas vezes conduzo pesquisas adicionais, o que muitas vezes me expõe a fragmentos de informações aos quais normalmente não estaria exposto. Quando escrevo, é mais provável que me lembre do que aprendi. Além disso, às vezes encontro diferentes percepções e perspectivas que desafiam meus pontos de vista originais. Todo o processo de escrita é uma conversa viva e contínua que me permite processar as informações que encontro e fazer meus próprios julgamentos.
Escrever é uma ótima maneira de organizar e organizar seus pensamentos (Foto de Radu Florin no Unsplash).
Escrever é uma ótima maneira de digerir e processar as informações que absorvemos. No entanto, a erudição e o intelecto não decorrem da quantidade de informações que absorvemos, mas da nossa capacidade de processar essas informações e tirar conclusões significativas delas.
Escrever é uma ótima maneira de digerir e processar as informações que temos. No entanto, a erudição e a inteligência surgem não da quantidade de informação que recebemos, mas da nossa capacidade de processar essa informação e tirar conclusões significativas dela.
Escrever é uma ótima maneira de digerir e processar informações. No entanto, o conhecimento e a inteligência não provêm da quantidade de informação que absorvemos, mas da nossa capacidade de processar essa informação e tirar dela conclusões significativas.#### 5. Escrever como forma de catarse(Escrever é uma forma de catarse/Escrever é uma forma de catarse) Esta última razão pela qual acho que escrever é importante pode não ser tão diretamente relevante para a função de um desenvolvedor quanto as quatro últimas razões. Mas acho que é tão ou mais importante. Grande parte da razão pela qual escolhi escrever é porque escrever é uma ótima válvula de escape para minhas emoções e sentimentos. Não gosto de manter meus sentimentos e pensamentos reprimidos, por isso procuro escrever como forma de catarse. A última razão pela qual considero escrever importante pode não estar diretamente relacionada à função de desenvolvedor pelos últimos quatro motivos. Mas acho que isso também é importante, se não mais importante. Grande parte da razão pela qual escolhi escrever é porque escrever é uma importante válvula de escape para minhas emoções e sentimentos. Não gosto de reprimir meus sentimentos e pensamentos, por isso uso a escrita como uma forma de catarse. A última razão pela qual considero escrever importante pode não estar tão diretamente relacionada à função de um desenvolvedor quanto as quatro últimas razões. Mas acho que é tão importante, se não mais importante. Grande parte da razão pela qual escolhi escrever é porque escrever é uma ótima forma de expressar minhas emoções e sentimentos. Não gosto de reprimir meus sentimentos e pensamentos, por isso procuro escrever como uma forma de catarse.
Quando eu era mais jovem, costumava escrever anotações em um diário. Agora escrevo sobre uma variedade de tópicos e os publico para o mundo ler. Mas de vez em quando voltarei à caneta e ao papel para expressar minhas idéias pessoais. Mantenho um diário privado onde escrevo ocasionalmente quando tenho dúvidas sobre meus objetivos profissionais, vida pessoal, relações sociais e tudo mais. Quando eu era mais jovem, costumava escrever anotações em um diário. Agora escrevo sobre muitos tópicos e os publico para o mundo ler. Mas de vez em quando uso caneta e papel para expressar meus pensamentos pessoais. Ocasionalmente escrevo em um diário pessoal quando duvido de meus objetivos profissionais, vida pessoal, relações sociais e tudo mais. Quando eu era jovem, muitas vezes mantinha um diário. Agora, escrevo sobre uma variedade de tópicos e os publico para o mundo ler. Mas de vez em quando volto à caneta e ao papel para expressar meus pensamentos pessoais. Mantenho um diário pessoal onde escrevo ocasionalmente quando tenho dúvidas sobre meus objetivos profissionais, vida pessoal, relações sociais e tudo mais.
<tamanho da fonte=6> Não há nada para escrever. Tudo o que você faz é sentar-se diante de uma máquina de escrever e sangrar. </font> Nada que escrever. Tudo o que você precisa fazer é sentar na frente de uma máquina de escrever e sangrar. Escrever não é nada. Tudo o que você faz é sentar em frente a uma máquina de escrever e sangrar.
Quando escrevo sobre meus sentimentos, parece que estou conversando com um amigo que sabe ouvir muito bem. É uma forma de eliminar emoções negativas e falar para uma página vazia sem medo de julgamento. Quando escrevo sobre meus sentimentos, parece que estou conversando com um amigo que é um ótimo ouvinte. É uma maneira de limpar minha mente da negatividade e falar para uma página vazia sem medo de julgamento. Quando escrevo sobre meus sentimentos, parece que estou conversando com um amigo que me escuta bem. Para mim, é uma forma de me livrar das emoções negativas e falar para uma página em branco sem medo de ser julgado.
Escrever tem muitos benefícios e, embora possa não ser a sua forma preferida de expressar seus pensamentos, é uma habilidade necessária e útil mesmo no mundo cacofônico e caótico de hoje. Mesmo que você seja um iniciante no mundo da escrita, recomendo que tente sentar-se sozinho com seus pensamentos e deixar sua mente fluir livremente. É incrível o que você pode inventar. Escrever traz muitos benefícios e, embora possa não ser sua primeira escolha para expressar seus pensamentos, é uma habilidade necessária e útil mesmo no mundo barulhento e caótico de hoje. Mesmo que você seja um iniciante no mundo da escrita, recomendo que pense apenas em seus pensamentos e deixe-os fluir livremente. O que você pode pensar é incrível. Escrever tem muitos benefícios e, embora possa não ser sua primeira escolha para expressar seus pensamentos, é uma habilidade necessária e útil, mesmo no mundo barulhento e confuso de hoje. Mesmo que você seja novo na escrita, sugiro que tente sentar-se sozinho com seus pensamentos e deixá-los fluir livremente. É incrível o que você pode inventar.
. . .
Obrigado por reservar um tempo para verificar meu artigo! Obrigado por reservar um tempo para verificar meu artigo!
Se você gostou deste artigo, bata palmas, siga-me no Medium e recomende este artigo para seus amigos. Sinta-se à vontade para me seguir no Instagram ou conectar-se comigo no LinkedIn! Se você gostou deste artigo, bata palmas, siga minhas instruções e recomende este artigo a seus amigos. Sinta-se à vontade para me seguir no Instagram ou conectar-se comigo no LinkedIn!
Derek Mei http://www.derekmei.com
DICAS:
Como baixar uma imagem grande
Geralmente usamos SDWebImage para baixar fotos. SDWebImage baixa imagens diretamente na memória e as utiliza diretamente para exibição. No entanto, se uma imagem for muito grande, baixá-la diretamente usando SDWebImage provavelmente causará um aumento repentino na memória e travará. Como resolver este problema? A Apple tem oficialmente um exemplo de carregamento de imagens locais grandes (https://developer.apple.com/library/archive/samplecode/LargeImageDownsizing/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011173-Intro-DontLinkElementID_2),参照这个例子,我们可以先把图片下载到本地,然后再用苹果的例子进行加载图片,下载图片到本地可以用AFNetWorking,把图片先下载到本地。
Compartilhar:
Como aprender bem a estrutura de dados:
Aqui estão algumas opiniões de outras pessoas para referência:
https://www.zhihu.com/question/19830721/answer/205887662
数据结构的那些排序算法总是记不住,这个真的背的吗?
https://www.zhihu.com/question/51337272/answer/438910111
背下来吧,就背`快排`和`堆排`就行,`归并排序`不用背,但最好背下来怎么合并两个有序链表。这三个(其实是两个半)背下来,可以很多变化,比如说快排可以变换成找top k或者中位数的selection算法。堆排背下来就搞懂了二叉堆,堆可以做N多涉及优先级队列的算法,最短路也用得到。这些搞下来,你就熟悉了数组,链表,堆,二叉树,然后你会发现二叉树可以放在数组里,也可以像链表那样连着。图也是可以用数组和链表来表达成邻接表,然后你会发现Hash表也是类似的结构。到此为止,你只需要背这两个半的排序,本科时代的数据结构与算法你就基本学通了。。。。
Aqui estão alguns resumos de classificação:
理解的基础上归下类,记下每种特点就行了,还是挺直观的。下面就以常用的六个排序算法(升序)为例说下特点。
三种`n^2`的:冒泡,选择和插入。
冒泡:目的,每次排好最后一个。方式,从第一个开始查看相邻俩,不合适(前面的大)就交换,这样最后一个一定是最大的。然后,数组元素减一(最后一个排好了扔了吧),缩小规模再来一次。
选择:每次从待选数组中拎出一个最大的来,放到最后,然后缩小规模再来一次。
插入:假设后面的序列是有序的,每次从剩余数组中拎出最后一个,插入到有序数组中合适位置。然后剩余数组缩小规模再插一次。
三种nlgn的:快排,归并和堆排。
快排:每次随便选一个,把它整合适了(放到最终有序数组正确位置),然后比他小的扔左边,比他大的扔右边。然后除掉该数字外的左右子数组各自缩小规模再来一次。
归并:随便找个位置,砍成两半。这两半各自缩小规模了吧,然后假设他们自己来了好多次排好了。最后合并这俩有序数组就行。
堆排:这个比较有意思,核心要实现一个堆化函数。这个函数什么意思呢,就是假设一个大顶堆只有根元素不合法,左右子树都合法(符合堆性质),然后把堆顶元素一路往下搞,跟冒泡差不多,使整个树满足堆的性质。然后呢,把整个数组搞成符合堆的性质(自底而上,从第一个有孩子的元素一直调用堆化函数搞到根元素),把第一个(堆顶,即最大元素)和最后一个交换。如此一来,规模缩小一个,再来一次(堆化&交换)。其他还有shell排啦,桶排啦。不急,消化了这六个再说。
即便你看了算法的证明,某种程度上还是“背”(为什么这么说,后面会详述)。我自己遇到新算法基本是会看证明的,但是发现没多久还是会忘掉,这是死记硬背的标准症状。如果你也啃过算法书,我相信很大可能性你会有同感:为什么当时明明懂了,但没多久就忘掉了呢?为什么当时明明非常理解其证明,但没过多久想要自己去证明时却发现怎么都没法补上证明中缺失的一环呢?(http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/)
Minha opinião: Ao aprender algoritmos e estruturas de dados, se a base for relativamente pobre, você pode primeiro escrever as estruturas de dados de alguns algoritmos básicos e, então, ser capaz de implementar esses algoritmos básicos e estruturas de dados sozinho. Depois de compreender completamente essas coisas básicas, você poderá resolver questões mais difíceis, porque as soluções para questões mais difíceis usarão coisas básicas. Não responda a perguntas difíceis desde o início. Não faz sentido. Isso não apenas prejudicará sua confiança, mas você não conseguirá compreender muitas das soluções. Tudo que você precisa fazer é se familiarizar com os algoritmos básicos e estruturas de dados. Se você estiver familiarizado com ele, poderá pelo menos implementá-lo em código. Isso não significa apenas que você sente que entende isso. Existe uma grande lacuna entre a compreensão e a implementação. Somente quando você mesmo o implementa você pode sentir os detalhes e a essência.
É melhor se familiarizar com a classificação e pesquisa da seguinte maneira: Classificação comumente usada: ordenação por inserção ordenação por seleção classificação por mesclagem classificação de bolha Classificação de pilha Classificação rápida classificação de contagem Classificação de raiz classificação de balde
Encontre a estrutura: Árvore de pesquisa binária [BST] Árvore de pesquisa binária balanceada [AVL] Árvore de pesquisa multidirecional/árvore B~/árvore B+ árvore vermelha preta [RBT] Comparação dinâmica da árvore de pesquisa
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