1. 程式人生 > >《劍指Offer》——二維陣列中的查詢

《劍指Offer》——二維陣列中的查詢

題目描述

在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

 

#include<cstdio>
#include<cstdlib>
#include<vector>
#include<iostream>
using namespace std;
/*
* Created by HarvestWu on 2019/01/14.
/*
矩陣有序,從左下角開始,向上遞減,向右遞增;
從左下角開始查詢,當要查詢數字比左下角數字大時,右移;
要查詢數字比左下角數字小時,上移。
*/
class Solution {
public:
	bool Find(int target, vector<vector<int> > array) {
		int rowNum = array.size();
		int colNum = array[0].size();
		int i, j;
		for (i = rowNum - 1, j = 0; i >= 0 && j < colNum;){
			if (target<array[i][j])
				i--;
			else if (target>array[i][j])
				j++;
			else
				return true;
		}
		return false;
	}
};

int main(){
	vector<vector<int>> array(5, vector<int>(5));
	int a = 0, b;
	for (int i = 0; i < 5; i++){
		b = a;
		for (int j = 0; j < 5; j++){
			array[i][j] = b++;
		}
		a++;
	}
	Solution s;
	cout << s.Find(45, array) << endl;
	return 0;
}