面试题4:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:关注数组的右上角或者左下角的元素,和比较number对比,逐渐缩小数组的比较范围。
bool Find(int *matrix, int rows, int columns, int number)
{
bool found = false;
if (matrix != nullptr && columns > 0 && rows > 0)
{
int row = 0;
int column = columns - 1;
while (row < rows && column>0)
{
if (matrix[row*columns + column] > number)
{
column--;
}
else if (matrix[row*columns + column] < number)
{
row++;
}
else {
found = true;
break;
}
}
}
return found;
}
// 面试题5:替换空格
// 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,
// 则输出“We%20are%20happy.”。
思路:在同一个字符串里,计算好空格数从而事先算出替换后的空格多长,用两个索引,同时从字符串后面向前
替换。第一个指针遇到空格时,第二个指针开始加 替换的内容。一直持续到两个指针位置相同,即代表剩下字
符串没有空格。
void ReplaceBlank(char string[], int length)
{
if (string == nullptr || length < 0)
return;
int numberOfBlank = 0;
int originalLength = 0;
int i = 0;
while (string[i] != '\0')
{
++originalLength;
if (string[i] == ' ')
{
++numberOfBlank;
}
++i;
}
int newLength = originalLength + numberOfBlank * 2;
if (newLength > length)
return;
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while (indexOfNew > indexOfOriginal && indexOfNew >= 0)
{
if (string[indexOfOriginal] != ' ')
{
string[indexOfNew--] = string[indexOfOriginal];
}
else {
string[indexOfNew--] = '0';
string[indexOfNew--] = '2';
string[indexOfNew--] = '%';
}
--indexOfOriginal;
}
}