190424打卡:在行列都排好序的矩阵中找数

题目描述:
给定一个有N×M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的,实现一个函数,判断K是否在matrix中,
要求时间复杂度O(N +M),额外空间复杂度为O(1)
在这里插入图片描述
思路:抓住题目的特点,矩阵的每一行和每一列都是排好序的,以升序为例,设置一个坐标,从右上角值为4的位置出发,如果该位置的值大于K,则将该坐标向左移动,如果该位置的值小于K,则将该坐标的向下移动,如果相等,则直接返回true,如果该坐标的行或列超出了矩阵的行或列的范围,仍然没有找到,则返回false

public class FindNumber {
	public static boolean isContains(int[][] matrix, int K) {
		int h = 0;
		int l = matrix[0].length- 1;
		while(l >= -1 && h < matrix.length) {
			if (matrix[h][l] > K) {
				l--;
			} else if (matrix[h][l] < K) {
				h++;
			} else {
				return true;
			}			
		}
		
		return false;
	}
	
	public static void main(String[] args) {
		int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
		int K = 63;
		System.out.println(isContains(matrix, K));
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42447402/article/details/89489732