剑指offer-学习笔记
前言:18/06/06开始学习,每个程序都会用C写一遍,因书中用C++举例,也会换种思路写,供学习和参考!!!很推荐这本书很不错,准备入手,一般不买实体书,都用电子书,因一般都看一遍,但这本会看很多遍!无论刚毕业,还是跳槽都可以看一下...
面试题3:二维数组中的查找

题目如图,所有题目截图均引自《剑指offer》,接下来不再说明!
书中从右上角开始查找,我的程序从左下角查找:
#include<stdio.h>
#include<stdbool.h> bool Find(int (*num)[],int rows,int column,int number)
{
bool found = false;
if(num!=NULL && rows> && column>)
{
int col = ;
int row = rows-;
while(col<column && row>=)
{
if((*num)[row*column+col] == number)
{
found = true;
break;
}
if((*num)[row*column+col] < number)
++col;
else
--row;
}
}
return found;
}
int main()
{
int number;
int num[][] = {{,,,},{,,,},{,,,},{,,,}};
puts("please input your number:");
scanf("%d",&number);
bool res = false;
res = Find(num,,,number);
printf("res:%d\n",res);
return ;
}
对逻辑不理解的,可以随时留言,随时解答!!!
面试题4:

代码如下:
#include<stdio.h> void ReplaceBlank(char string[],int length)
{
if(string==NULL && length<=)
return;
int originalLen = ;//字符串实际长度
int numBlank=,i=;
while(string[i] != '\0')
{
++originalLen;
if(string[i] == ' ')
++numBlank;
++i;
} //替换后的长度
int newLen = originalLen + numBlank*;
if(newLen > length)
return; int indexLen = originalLen;
int indexOfNew = newLen;
while(indexLen>= && indexOfNew>indexLen)
{
if(string[indexLen] == ' ')
{
string[indexOfNew--]='';
string[indexOfNew--]='';
string[indexOfNew--]='%';
}
else
{
string[indexOfNew--] = string[indexLen];
}
--indexLen;
}
} int main()
{
char buf[]={"hello world!"};
ReplaceBlank(buf,);
printf("buf:%s\n",buf);
return ;
}
注:重点理解从尾到头遍历的时间复杂度为O(n)!!!
面试题5:

#include<stdio.h>
#include<stdlib.h> typedef int data_t;
//栈结构
typedef struct LIFO
{
int *data; // 4字节的指针 指向数组(后分配的数组)
int maxlen; // 存储数据的个数最大值
int top;
}seqstack_t; //链表结构
typedef struct node{
int data;
struct node *next;
}linknode_t,* linklist_t; //创建空的链表
linknode_t *CreateLink()
{
linknode_t *H;
H = (linklist_t)malloc(sizeof(linknode_t));
H->next = NULL;
return H;
} //初始化一个空链表
void InitLink(linknode_t *H)
{
linknode_t *r,*p;//r指向队尾
r = H;
int i=;
for(;i<;i++)
{
p = (linklist_t)malloc(sizeof(linknode_t));
p->data = i+;
p->next = NULL;
r->next = p;
r = p;//再将r指向队尾
}
} //打印所有节点
linknode_t * ShowLink(linknode_t *H,seqstack_t *T)
{
linknode_t *p,*r;
int temp=;
p = H->next;
while(p != NULL)
{
T->data[T->top]=p->data;
p = p->next;
T->top++;
}
--T->top;
while(T->top>=)
{
printf("data:%-5d",T->data[T->top]);
T->top--;
}
} //清空链表
void ClearLink(linknode_t *H)
{
linknode_t *p,*q;//p是删除的节点,q记录下一个要删除的节点
q = H->next;
while(q != NULL)
{
p = q;
q = p->next;
free(p);
}
printf("\n");
H->next = NULL;
} seqstack_t * CreateStack(int max)
{
seqstack_t *H; // 分配结构体空间 --> 一个栈
H = (seqstack_t *)malloc(sizeof(seqstack_t));
H->data = (data_t *)malloc(sizeof(data_t) * max);// 结构体成员赋值
H->maxlen = max;
H->top = ;
return H;
} int main()
{
seqstack_t *T=CreateStack(); // 获取一个空的栈
linknode_t *H=CreateLink();
InitLink(H);
ShowLink(H,T);
ClearLink(H);
free(H); return ;
}
注:用栈的后进先出LIFO思想实现链表的从尾到头的输出!!!
未完待续......
剑指offer-学习笔记的更多相关文章
- 【剑指Offer学习】【全部面试题汇总】
剑指Offer学习 剑指Offer这本书已经学习完了.从中也学习到了不少的东西,如今做一个总的文件夹.供自已和大家一起參考.学如逆水行舟.不进则退.仅仅有不断地学习才干跟上时候.跟得上技术的潮流! 全 ...
- 【剑指Offer学习】【所有面试题汇总】
剑指Offer学习 剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退.只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代 ...
- 刷《剑指offer》笔记
本文是刷<剑指offer>代码中的学习笔记,学习ing.. 衡量时间和空间. 递归的代码较为简洁,但性能不如基于循环的实现方法.
- 剑指Offer整理笔记
说在前面,本篇的目的是为了学习剑指offer,以及博客园的排版功能,并将文章排版得整洁得体. 梵蒂冈梵蒂冈地方官方
- 《剑指Offer》笔记(更新中)
这几天为了找工作开始看<剑指offer>,到现在也大概浏览一遍了,前两天看作者博客中提到九度OJ,就去看了一下,发现上面有书上的题目,就想可以自己写代码练习一下,而不仅仅是看解题思路,毕竟 ...
- 【剑指Offer学习】【面试题:二维数组中的查找】PHP实现
最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的 ...
- LeetCode—剑指 Offer学习计划
第 1 天 栈与队列(简单) 剑指 Offer 09. 用两个栈实现队列 class CQueue { public: CQueue() { } stack<int>s1,s2; void ...
- 剑指offer学习读书笔记--二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序.请设计一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有这个整数. 1 2 8 9 2 4 9 1 ...
- 【剑指Offer学习】【面试题55:字符流中第一个不反复的字符】
题目:请实现一个函数用来找出字符流中第一个仅仅出现一次的字符. 举例说明 比如,当从字符流中仅仅读出前两个字符"go"时.第一个仅仅出现一次的字符是'g'.当从该字符流中读出前六个 ...
- 【剑指Offer学习】【面试题19 :二叉树的镜像】
题目:请完毕一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义: /** * 二叉树的树结点 */ public static class BinaryTreeNode { int va ...
随机推荐
- 实验十五 GUI编程练习与应用程序部署
实验十五 GUI编程练习与应用程序部署 实验时间 2018-12-6 一:理论部分 1.Java 程序的打包:编译完成后,程序员将.class 文件压缩打包为 .jar 文件后,GUI 界面序就可以 ...
- 51Nod - 1046 (附关于快速幂的讨论)
题意: 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. 分析: 快速幂模板题. 快速幂: 1.自然数的拆分 对于任何的自然数, 可以把它用形如1001 ...
- 利用AnyProxy代理监控APP流量
1.介绍 AnyProxy 是阿里巴巴基于 Node.js 开发的一款开源代理服务器. 代理服务器站在客户端和服务端的中间,它可以收集双方通信的每个比特.一个完整的代理请求过程为:客户端首先与代理服务 ...
- shell遍历文件夹
遍历目录下的所有文件 假如有一个文件夹路径为dir,遍历文件 for file in /path/dir/* do if test -f $file then echo $file arrary=($ ...
- Spring的声明式事务管理<tx:advice/>
<tx:advice/> 有关的设置 这一节里将描述通过 <tx:advice/> 标签来指定不同的事务性设置.默认的 <tx:advice/> 设置如下: 事务传 ...
- python学习第四天笔记整理
一.迭代器及生成器 #迭代器:迭代的工具 #1 什么是迭代:指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值# while True:# print('===== ...
- 基于react可无限向内部添加节点的tree
这两天学习react,撸了一遍文档后开始自己动手写点东西. 正好从朋友那得到灵感,写一个小例子. 这个东西是这样的,就是点击的这个节点就往它里面添加一个child. 于是乎!我想到的就是用自调函数,递 ...
- JavaScript实现页面刷新滚动条位置不变(利用cookie)
实验环境:vs2015 asp.net(C#) 主要原理: 1.在页面滚动时或点击按钮时将当前滚动条位置记录到cookie[pos], 2.页面刷新或重载时查询cookie[pos]中的值是否存在,若 ...
- Python开发系列
一 Python基础理论 Python简介 数据类型 字符编码与文件操作 函数 模块与包 常用模块 面向对象 网络编程 相关代码示例参考 https://github.com/Jonathan131 ...
- dubbo 源码学习1 服务发布机制
1.源码版本:2.6.1 源码demo中采用的是xml式的发布方式,在dubbo的 DubboNamespaceHandler 中定义了Spring Framework 的扩展标签,即 <dub ...