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;
}