【劍指Offer面試編程題】題目1384:二維數組中的查找--九度OJ

題目描述:

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

輸入:

輸入可能包含多個測試樣例,對於每個測試案例,

輸入的第一行爲兩個整數m和n(1<=m,n<=1000):代表將要輸入的矩陣的行數和列數。

輸入的第二行包括一個整數t(1<=t<=1000000):代表要查找的數字。

接下來的m行,每行有n個數,代表題目所給出的m行n列的矩陣(矩陣如題目描述所示,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。

輸出:

對應每個測試案例,

輸出”Yes”代表在二維數組中找到了數字t。

輸出”No”代表在二維數組中沒有找到數字t。

樣例輸入:

  1. 3 3  
  2. 5  
  3. 1 2 3  
  4. 4 5 6  
  5. 7 8 9  
  6. 3 3  
  7. 1  
  8. 2 3 4  
  9. 5 6 7  
  10. 8 9 10  
  11. 3 3  
  12. 12  
  13. 2 3 4  
  14. 5 6 7  
  15. 8 9 10  
樣例輸出:
  1. Yes  
  2. No  
  3. No  

解題思路】深入挖掘題目願意,巧妙利用題目的意圖,只需要用要查找的元素與輸入的數組每一個元素進行比較即可得到要查找的元素是否在輸入的數組裏面,數組也不用保存。比較簡單的思路,但卻是比較巧的解法。

AC code:

  1. #include <cstdio>  
  2. using namespace std;  
  3.   
  4. int main()  
  5. {  
  6.   int m,n,t;  
  7.   while(scanf("%d%d",&m,&n)!=EOF)  
  8.   {  
  9.     scanf("%d",&t);  
  10.     bool flag=true;  
  11.     for(int i=0;i<m;++i)  
  12.     {  
  13.       for(int j=0;j<n;++j)  
  14.       {  
  15.         int val;  
  16.         scanf("%d",&val);  
  17.         if(val==t)  
  18.           flag=false;      
  19.       }  
  20.     }  
  21.     if(flag)  
  22.       printf("No\n");  
  23.     else  
  24.       printf("Yes\n");  
  25.   }  
  26.   return 0;  
  27. }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章