21/02/22刷题记录Day4

766. 托普利茨矩阵

给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。

如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。

思路

1.因为是对角线上的元素相同问题,因此只需要遍历第一行第一列的元素,考虑其对角线即可。

完整代码

public boolean isToeplitzMatrix(int[][] matrix) {
		int m = matrix.length;
		int n = matrix[0].length;
		
		for(int i = 0; i < m; i++) {//表示不同行
			int j = 0;
			int k = i;
			int temp = matrix[i][0];
			while(j < n && k < m) {
				if(matrix[k][j] == temp) {
					k++;
					j++;
				}else {
					return false;
				}
			}
		}
		
		for(int j = 0; j < n; j++) {
			int i = 0;
			int k = j;
			int temp = matrix[0][j];
			while(i < m && k < n) {
				if(matrix[i][k] == temp) {
					k++;
					i++;
				}else {
					return false;
				}
			}
		}
		return true;

在这里插入图片描述

剑指 Offer 40. 最小的k个数

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

思路

这个题做的时候是暴力解答,但是像昨天的最近的K个距离和这道题本质一样,用大根堆建立,效率和内存使用都更少

完整代码

public static void main(String[] args) {
		int[] arr = {1,2,3};
		GetLeastNumbers p = new GetLeastNumbers();
		int[] res = new int[2];
		res = p.getLeastNumbers(arr, 2);
		for(int e : res) {
			System.out.print(e);
		}

	}
	public int[] getLeastNumbers(int[] arr, int k) {
		if(k == 0 || arr.length == 0) {
			return new int[0];
		}
		PriorityQueue<Integer> stack = new PriorityQueue<>();
		for(int i = 0; i < arr.length; i++){
			stack.add(arr[i]);
		}
		int[] result = new int[k]; 
		for(int i = 0; i < k; i++) {
			result[i] = stack.poll();
		}
		return result;
	}

猜你喜欢

转载自blog.csdn.net/weixin_42180334/article/details/113934466