二維數組找最大值
阿新 • • 發佈:2018-06-02
判斷 code RR 就是 AR 找最大值 return 並且 ret 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。
請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
我得思路是從左上角開始,即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;
}
二維數組找最大值