开宗明义:本系列基于牛客网剑指offer,刷题小白,一天两道我快乐!旨在理解和交流,重在记录,望各位大牛指点!
牛客网-剑指offer
文章目录
1、二维数组中的查找
描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。?
思路:
- 首先获取行与列: r o w C o u n t rowCount rowCount 与 c o l C o u n t colCount colCount;
- 选取一个数 a r r a y [ i ] [ j ] array[i][j] array[i][j] 与 t a r g e t target target 去比较大小,这个数初值值可以选为: a r r a y [ r o w C o u n t − 1 ] [ 0 ] array[rowCount-1][0] array[rowCount−1][0],这边取值需要大于小于唯一,逻辑好转换;
- 如果 a r r a y [ i ] [ j ] > t a r g e t array[i][j] > target array[i][j]>target,则 i − − i-- i−− ;
- 如果 a r r a y [ i ] [ j ] < t a r g e t array[i][j] < target array[i][j]<target,则 j + + j++ j++ ;
测试代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rowCount = array.size();
int colCount = array[0].size();
int i,j;
for(i=rowCount-1,j=0;i>=0&&j<colCount;)
{
if(target == array[i][j])
return true;
if(target < array[i][j])
{
i--;
continue;
}
if(target > array[i][j])
{
j++;
continue;
}
}
return false;
}
};
2、字符串替换空格
描述:实现一个函数,将一个字符串中的每个空格替换成 ‘%20’ 。例如,当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy.?
思路:
- 计算字符串里面空格的个数;
- 然后相应的非空字符往后移,中间补%20;
测试代码:
#include <stdio.h>
class Solution {
public:
void replaceSpace(char *str, int length) {
int count = 0;
int i, j;
//计算这句话里面的空格数量
for (i = 0; i < length; i++) {
if (str[i] == ' ') {
count++;
}
}
for (j = length - 1; j >= 0; j--) {
if (str[j] != ' ') {
str[j + 2 * count] = str[j]; //将字符串往后移2*count的距离
}
else{ //插入
count--;
str[i + 2 * count] = '%';
str[i + 2 * count + 1] = '2';
str[i + 2 * count + 2] = '0';
}
}
}
};