Diretório do artigo
Bidimensional pesquisa matriz
Descrição do título
(o mesmo que o comprimento de cada matriz unidimensional) em uma matriz bidimensional, cada fila da esquerda para a direita em ordem de tipo ascendente, para classificar cada coluna de cima para baixo, de modo a aumentar. Uma função completa, introduzir uma matriz tal bidimensional e um número inteiro, é determinado se a matriz contém o número inteiro.
idéias de solução de problemas: Matrix é ordenado, no canto inferior esquerdo do ponto de vista, os números estão diminuindo, o número certo está aumentando, assim que começar olhando a partir do canto inferior esquerdo, quando você está olhando para os números grandes que o canto inferior esquerdo, passo certo ; quando você está olhando por horas digitais, movendo-se um passo.
/*
@param: arr二位数组,target要查找的数字
@return: 当二位数组中存在要找查找的数字,则返回 1,否则返回 0
*/
int find(int arr[][N], int target)
{
int i = N - 1; //从左下角开始
int j = 0;
while(i >= 0 && j < N)
{
if(target == arr[i][j]) //找到要查找的数字
return 1;
if(target > arr[i][j]) //比左下角的数字大,右移一步
j++;
else //比左下角的数字小,向上移动一步
i--;
}
return 0;
}
Não faça adição e subtração, multiplicação e divisão
Título Descrição
escrever uma função, e a soma de dois inteiros, a função não pode ser utilizado in vivo requer +, -, *, / quatro símbolos aritméticos.
Esboço de Solução: valores binários calculados usando uma maneira de três passos por adição de:
- Os membros da agregação de valor, não um carry. Cada equivalente binário da soma você faz operação XOR (^).
- valor Carry é calculado. Eu faço o equivalente com a operação (&), então o esquerdo.
- Repetir os dois passos anteriores até que o transporte é 0, em seguida, para fora do circuito.
exp: 5 (101) 7 (0111)
- 101 ^ 111 == 010
- (101 e 111) << 1 == 1010
- Repetir o procedimento acima duas etapas, 0010 ^ == 1010 1000, (0010 & 1010) << 1 == 0100.
repetidas, 1000 ^ == 0100 1100, (1000 & 0100) == 0 << 1, fora do circuito, o retorno de 1100 (12) .
int Add(int num1, int num2)
{
int sum, carry;
while(0 != num2)
{
//对应位相加但不进位,用异或实现
sum = num1^num2;
//记下进位,用与 和 移位实现
carry = (num1&num2)<<1;
num1 = sum;
num2 = carry;
}
return num1;
}
substituir espaços
Título Descrição
Por favor implementar uma função, uma corda para substituir cada espaço com "20%". Por exemplo, quando a corda Eu sou um menino bonito. Após a string após a substituição de I% 20Am% 20A% 20Handsome% 20Boy.
Resolução de problemas idéias: Substitua frente para trás, a parte de trás dos personagens de ser constantemente se movendo para trás, para mover várias vezes, de modo ineficiente. Mover-se de trás para a frente, primeiro calcular quanto espaço é necessário, e em seguida, passar por trás, cada personagem pode mover apenas uma vez, um pouco mais eficiente.
/*
@param: str字符串
*/
void replaceSpace(char *str)
{
int Oldlen = 0; //记录字符串原来的长度
int cnt = 0; //记录空格的数量
int Newlen; //记录插入后的长度
while(str[Oldlen] != '\0') //遍历一遍字符串找出空格的数量
{
if(str[Oldlen] == ' ')
cnt++;
Oldlen++;
}
Newlen = Oldlen + 2*cnt; //插入后的长度,不用减一因为隐藏个'\0'也要算上
if(Newlen > max_size) //如果计算后的长度大于总长度就无法插入
return ;
while(Oldlen >= 0 && Newlen > Oldlen) //放字符
{
if(str[Oldlen] == ' ') //碰到空格就替换
{
str[Newlen--] = '0';
str[Newlen--] = '2';
str[Newlen--] = '%';
}
else //不是空格就将Oldlen指向的字符放入Newlen指向的位置
str[Newlen--] = str[Oldlen];
Oldlen--; //不管是if还是else,Oldlen都要前移
}
}
lista reversa
Descrição Título
de entrada de uma lista ligada, a lista ligada após a inversão, a saída do novo cabeçalho.
ideias de resolução de problemas:
ListNode* ReverseList(ListNode* pHead)
{
if(NULL == pHead) //判断链表是否为空
return NULL;
ListNode* pre = NULL;
ListNode* next = NULL;
while(pHead)
{
next = pHead->next;
pHead->next = pre;
pre = pHead;
pHead = next;
}
return pre; //pre成为新的头结点
}
escadas do salto de rã
Descrição do problema
Um sapo pode saltar uma vez um nível 1, nível 2 também pode saltar sobre. O sapo pulou buscando um total de n nível de ensino como muitos saltos. (Contagem de prioridades diferentes para diferentes resultados)
idéias de solução de problemas: o número de colunas com a mesma solução Fibonacci, nada a dizer.
Quando N = 1, uma espécie salta;
quando n = 2, há dois saltos;
quando n = 3, existem três tipos de saltos;
quando n = 4, os cinco tipos de saltos;
......
quando o n-; ter f (n-1) + f (n-2) tipos de saltos;
int jumpFloor(int number)
{
if(number <= 2)
return number;
int num1 = 1;
int num2 = 2;
int tmp;
int i;
for(i=2; i<number; i++)
{
tmp = num1 +num2;
num1 = num2;
num2 = tmp;
}
return num2;
}
nível anormal
Descrição Título
rã passos pode-se saltar fase 1, fase 2 pode saltar salto ...... pode ser n fases. O sapo pulou buscando um total de n nível de ensino como muitos saltos.
Esboço de Solução:
(. 1). F 1 =
F (2) = F (2-1) + F (2-2) // F (2-2) representa uma segunda ordem hop frequência fase 2
f (3) = F (3-1) + F (3-2) + F (3-3)
......
F (n-) = F (n-- 1.) + F (n - 2) + F + ...... (3-n). + f (N- (n-1 )) + F (nn)
Descrição:
- Em que f (n) representa 1,2, ...... n tem um número de fases de ordem n método passo salto.
- n = 1, apenas um tipo de método de salto, F (1) = 1
- Quando n = 2, haverá dois saltos, um grau 1 ou 2. f (2) = F (0) + f (1)
- Quando n = 3, haverá três tipos de saltos, um nível de 1, 2 ou 3. A primeira fase é então saltam de volta descansar 1: f (3-1); primeira fase de salto 2, o f restante (3-2); os três primeiros fora do restante f (3-3) . Assim, conclui que: F (3) = f (3-1) + f (3-2) + f (3-3)
- Quando n = n, n tipos de método de salto vai, um nível 1, nível 2 ... n estágios. Concluiu-se que: f (n) = f ( n-1) + f (n-2) + ...... + f (N- (n-1)) + F (nn) ----> f (0) + f (1) + f ( 2) + f (3) + ...... + f (n-2) + f (n-1).
Pode ser reduzida a: f (n) = 2 * f (n-1)- Concluiu-se que:
F (n-) n- = 0 quando f (n) = 0; f (n) = 1 quando f (n) = 1; n > = 2 quando f (n) = 2 * f (n- 1).
int jumpFloorII(int number)
{
if(0 == number || 1 == number)
return number;
int i;
int power = 2;
for(i=2; i<number; i++)
{
power *= 2;
}
return power;
}
Ajustar a ordem da matriz de modo que, em frente do par-ímpar
Descrição Título
de entrada de uma matriz de números inteiros, para realizar uma função de ajustar a ordem dos números na matriz, de tal forma que toda a parte ímpar de metade da frente da matriz, a matriz está localizada na segunda metade de todos mesmo e assegurar entre pares e ímpares, pares e ímpares as posições relativas inalterada.
exemplo:
Entrada: [1234567] |
---|
Saída: [1357246] |
idéias de solução de problemas:
semelhantes a bubble sort, antes e depois do par e ímpar trocadas.
void reOrderArray(int *array, int len)
{
int i, j;
for(i=0; i<len-1; i++)
{
for(j=len-1; j>i; j--)
{
//前偶后奇,则交换
if(!(array[j-1]&1) && array[j]&1)
{
array[j] = array[j]^array[j-1];
array[j-1] = array[j]^array[j-1];
array[j] = array[j]^array[j-1];
}
}
}
}