牛客网&剑指Offer&二维数组的查找

牛客网&剑指Offer&二维数组的查找

在这里插入图片描述
代码实现

#include<iostream>
#include<vector>

using std::cout;
using std::cin;
using std::endl;
using std::vector;

class Solution {
public:
	bool Find(int target, vector<vector<int> > array) {
		if (array.empty()) return false;
	
		int array_row = array.size();  //数组行数
		int array_column = array[0].size();  //数组列数

		int new_row = 0;
		int new_column = array_column - 1;

		while ((array_row > 0) && (array_column > 0))
		{
			if ((array[new_row][new_column]) == target)
				return true;
			else if (array[new_row][new_column] < target)
			{
				array_row--;
				new_row++;
			}
			else if (array[new_row][new_column] > target)
			{
				array_column--;
				new_column--;
			}
			else
				return false;
		}
		return false;
	}
};



int main()
{
	int test_value = 9;
	Solution test;
	vector<vector<int> >array(4, vector<int>(4));  //定义一个4*4的二维数组
	//给数组元素赋值 
	array[0][0] = 1;
	array[0][1] = 2;
	array[0][2] = 3;
	array[0][3] = 4;
	array[1][0] = 2;
	array[1][1] = 3;
	array[1][2] = 6;
	array[1][3] = 7;
	array[2][0] = 3;
	array[2][1] = 4;
	array[2][2] = 7;
	array[2][3] = 8;
	array[3][0] = 5;
	array[3][1] = 6;
	array[3][2] = 9;
	array[3][3] = 10;

	if (test.Find(test_value, array) == true)
	{
		cout << "true" << endl;
	}
	else
		cout << "false" << endl;

	return 0;
}

编程笔记

  • 编程思路:对二维数组的数据特点进行分析,构建查找元素策略;
  • 要使用vector对象,必须包含头文件vector,其次,vector包含在名称空间std中,可使用using编辑指令、using声明或std::vecor;
  • 声明创建一个名为vt的vector对象,它可储存n_elem个类型为typeName的元素:
vector<typeNme> vt(n_elem)

       其中参数n_elem可以是整型常量,也可以是整型变量;

  • 声明创建一个名为arr的array对象,它可储存n_elem个类型为typeName的元素:
array<typeNme,n_elem> arr;

       与创建vector对象不同的是,n_elem不可以是整型变量;

int array_row = array.size();  //数组行数
int array_column = array[0].size();  //数组列数
  • 分别求一维数组的长度。
//可适用于int类型数组和array类型数组,不适用于vector类型数组
template<class T>
int length(T& arr)
{
	return sizeof(arr) / sizeof(arr[0]);
}

//可适用于vector类型数组和array类型数组,不适用于int类型数组
vector<int> vec(7);
array<int, 10>arr;

arr_len = arr.size();
vec_len = vec.size();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值