研二的开始找工作了,首先祝愿他们都能够找到自己满意的工作。看着他们的身影,自问明年自己这个时候是否可以从容面对呢?心虚不已,赶紧从老严那儿讨来一本《剑指offer》。在此顺便将自己做题所想,发现的一些小技巧记录于此,就当是学习笔记。先上一些,没做完的后面有时间继续补上。
2013.09.04于行政北楼
题目1:二维数组的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成这样一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false;
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
思路:这题的关键点是用好“每一行从左到要递增,每一列从上到下递增”这个条件,解题时从数组右上角9出发,若它等于查找的数,那么返回结束;若它比查找数小,那么向左移动到8,继续查找;若它比查找数大,那么向下移动到12。比如说我们要寻找7,一次经过的数是9-8-2-4-7,返回。
1 #include<iostream> 2 using namespace std; 3 4 const int row=4; 5 const int column=4; 6 7 bool Find(int array[][4],int search_number) 8 { 9 bool result=false; 10 int i=0; 11 int j=column-1; 12 int temp;//=array[i][j]; 13 14 while(i<=row&&j>=0) 15 { 16 temp=array[i][j]; 17 if(search_number==temp) 18 { 19 result=true; 20 break; 21 } 22 else if(search_number>temp) 23 i++; 24 else 25 j--; 26 } 27 return result; 28 } 29 30 int main() 31 { 32 int array[][4]={ {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} }; 33 int search_number; 34 for(search_number=1;search_number<16;search_number++) 35 { 36 if(Find(array,search_number)) 37 cout<<"查找"<<search_number<<":Yes"<<endl; 38 else 39 cout<<"查找"<<search_number<<":No"<<endl; 40 } 41 return 0; 42 }