[剑指Offer笔记]3_数组

[剑指Offer笔记]3_数组

数组,字符串:连续空间

链表,树:大量指针操作

栈:与递归相关

队列:广度优先算法相关

数组

  • O(1)时间读写元素;

  • 可以用数组实现 哈希表 ;

    有了哈希表可以实现O(1)查找!

  • 固定大小的数组,效率不高. STL 中的 vector

    先开辟一个小的空间,当空间不够时再分配更大的空间.每次为之前的2倍.

    使用动态数组要尽量计算减少改变容量大小的次数

  • 注意:

    数组与指针的关系

面试题:

  • 在一个二维数组中,每一行都按照从左往右递归的顺序排序,每一列都按照从上到下递增的书序排序.完成一个函数,输入一个这样的二维数组和一个数,判断该数是否在数组中.
分析:
  • 取数组的右上角 arr[i][j] ,判断它和目标数字 target 的关系
  • 若相等,则找到,若 arr < target,则target不在这一行,若arr>target,则target不在这一列
  • 注意边界的判断,防止越界.
代码实现:
	class Solution {
	public:
		bool Find(int target, vector<vector<int> > array) {

			int rows = array.size();
			int cols = array[0].size();

			bool FOUND = false;

			int i = 0, j = cols - 1; // 左上角(i,j),i行j列

			while (1) {
				// 没有越界
				if (i >= 0 && i < rows &&j >= 0 && j < cols) {

					if (array[i][j] == target) {
						FOUND = true;
						break;
					} 
					else if (array[i][j] < target) {
						i++;
					}
					else { // array[i][j] > target
						j--;
					}
				}
				else {
					break;
				}
			}
			return FOUND;
		}
	};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值