二維數組找最大值


 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。
請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 
 
我得思路是從左上角開始,即arr[0][0],將這個整數和它相比,如果比它大,那么將這個整數和arr[1][1]比
如果還大那么繼續,如果小於arr[n][n],那么去arr[n][n]這個元素的左面和上面找,如果有說明在這個數組中
沒有說明不在
這個想法首先只適用於方陣,並且查找效率並不是最好
 
答案的解法是從左下角開始
如果整數比這個元素大說明整數在這個元素的右邊,
如果整數比這個元素小說明整數在這個元素的左邊。
更新元素,重復上述步驟
如果這個元素已經到邊界並且出界了還沒找到,那么就是沒有
int Search(int* arr,int x,int y,int num) {   //把二維數組當做一維數組處理
    if(arr == NULL || x <= 0 || y<= 0) return -1; int a = x-1; int b = 0; while(a >= 0 && a < x && b >=0 && b < y) { if(arr[a*y+b] > num) { a--; } else if(arr[a*y+b] < num) { b++; } else
            return 1; } return -1; } int main() { int arr[5][5] = {1,55,79,82,88, 2,56,80,83,109, 3,57,81,84,110, 4,58,90,100,120, 5,59,99,111,122}; int index = 0; index = Search((int*)arr,5,5,89); printf("%d",index); return 0; }

 

 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM