C#面試題 演算法 --- 1 二維陣列查詢目標值
int[][] matrix = { new int[] { 1, 4, 7, 11, 15 }, new int[] { 2, 5, 8, 12, 19 }, new int[] { 3, 6, 9, 16, 22 }, new int[] { 10, 13, 14, 17, 24 }, new int[] { 18, 21, 23, 26, 30 } };
searchTarget(matrix, 18);
/// <summary>
/// 在行遞增同時列遞增的二維陣列中查詢某個值是否存在
/// 從右上角開始走,利用這個順序關係可以在O(m+n)的複雜度下解決這個題:
/// 如果當前位置元素比target小,則row++
/// 如果當前位置元素比target大,則col--
/// 如果相等,返回true
/// 如果越界了還沒找到,說明不存在,返回false
/// </summary>
/// <param name="matric"></param>
/// <param name="target"></param>
public static bool searchTarget(int[][] matrix, int target)
{
int row = 0;
int col = matrix[0].Length - 1;
int rowLength = matrix.Length - 1;
while (row <= rowLength && col >= 0)
{
if (matrix[row][col] > target)
{
col--;
}
else if (matrix[row][col] < target)
{
row++;
}
else
{
return true;
}
}
return false;
}