剑指offer 三

数据结构

 

数据结构一直是技术面试的重点,大多数面试题都是围绕着数组、字符串、链表、树、栈、队列这几种常见数据结构展开的,因此每一个应聘者都需要熟练掌握这几种数据结构。

1、数组和字符串:两种最基本的数据结构,他们用连续内存分别存储数字和字符。

2、链表和树:面试中出现频率最高的数据结构。他们操作都需要操作大量的指针,因此在解决相关问题的时候一定要留意代码的鲁棒性,避免程序跑崩。

3、栈:与递归紧密相关。 队列:与广度优先遍历算法紧密相关。

   深刻理解这两种数据结构能帮助我们解决很多算法问题。

 

数组

 

    数组可以说是最简单的一种数据结构,它占据了一块连续的内存并顺序保存数据。使用数组之前都是需要申请空间的,即使保存一个数据也要为将来所用全部数据把空间申请出来,所以数组经常会有大量空闲的空间,这样来看数组对空间利用率不高。

   另一方面,数据是顺序存储的,所以数组的下标可以用来定位数据,这样可以实现在O(1)复杂度下实现数据的查找,读写。所以时间效率比较高。(可以借用数组时间效率高的优点实现哈希表)

   为了改善数组空间利用率不高的不足,提出了动态数组。如C++的stl中的vector,主要思想是:首先为数组申请一个比较小的空间,向数组中添加元素,当添加元素装不下时,再重新扩充容量,(vector是每次扩展都是以两倍扩充),扩展后将数组复制到新的空间,并将原先的空间释放掉。但是正如上面可以看到,多了很多操作,增加了时间上的消耗。

   c++中数组和指针是相互关联的两个概念。数组名其实就是一个指针。我们可以使用一个指针来访问数组,但是特别注意,c++没有记录数组的大小,所以使用指针时,一定注意不要越界,(常见的错误)。

 

题3:二维数组中的查找。

  要求:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入一个二维数组和一个整数,判断数组中是否含有该整数。

 像这种一时间看不出思路或找不到规律的,可以假设找某一个数来走完全过程就会发现规律。比如这个题重点就是如何消去某行某列最后剩下要找的那个数。具体题目:



以寻找7为例:



 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值