剑指offer-Day.2

3.二维数组的查找

二维数组matrix的每一行和每一列都是递增排序的,查找x是否在matrix中,存在则返回true,否则返回false。

例如:

1  2  4  9
2  5  7  10
3  6  8  12
9  11  13  15


查询8,返回true。

分析:

程序要求输入:matrix(一个指针),行数,列数,x

查找过程:每次和行/列最小值比较,则可以排除一行或一列。查询8时,先和第4列的第一个元素9比较,排除第4列;和第三列的第一个元素4比较,排除第一行;和第3列的第二个元素7比较,排除第二行;和第三列的第三个元素8比较,返回true。

代码:

bool find(int* matrix, int rows, int columns, int x){
	if (matrix == NULL | rows=0 | columns =0)//检测空指针
		return false;
	int r=0;
	int c=columns-1;
	while (r<rows && c>=0)
	{
		if (matrix[r*columns+c] > x)//多维数组的一维表示
			c--;
		else if (matrix[r*columns+c] < x)
			r++;
		else
			return true;
	}
	return false;
}

4.替换空格

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
char* ReplaceSpace(char* str, char* restr);
int main(int argc, int** argv)
{
	char str[20]="we are  happy.";
	char* restr="%20";
	ReplaceSpace(str,restr);
	printf("%s",str);
}

char* ReplaceSpace(char* str, char* restr){
	int spacecount=0;
	char* p1=str;
	char* p2;
	//char* newstr;
	int i=0;
	int j=0;
	int rsize;
	//统计空格数,p1最后指向str的'\0'
	while (*p1 != '\0')
	{
		if (*p1 == ' ')
			spacecount++;
		p1++;
	}
	//计算新串的长度,不计'\0'
	rsize=(strlen(str)+(strlen(restr)-1)*spacecount)*sizeof(char);
	//newstr= (char*)realloc(str,rsize);///realloc出错!!!!堆错误
	//assert(str);
	//if (str == NULL)
		//return NULL;
	//p2指向新串的'\0'位置,第一个复制的是老串的'\0'到新串的'\0'位置
	p2=str+rsize;
	for (i=0;i<spacecount;i++)
	{
		//复制每个单词
		while (*p1!=' ')
			*p2--=*p1--;
		p1--;//跳过空格
		//填充restr
		j=strlen(restr);
		while(j>0)
			*p2--=restr[--j];
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值