当前位置: 首页 > news >正文

杨氏数组中查找某一数值是否存在

判断数据是否存在于杨氏矩阵中

(小米真题)
题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于O(N)

构建一个8*8的杨氏矩阵

// 生成杨氏矩阵
public static int[][] generateRandomYoungTableau(int n) {int[][] matrix = new int[n][n];Set<Integer> usedNumbers = new HashSet<>();Random random = new Random();for (int i = 0; i < n; i++) {Set<Integer> rowNumbers = new HashSet<>();for (int j = 0; j < n; j++) {int number;do {number = random.nextInt(n * n) + 1; // 生成1到n*n之间的随机数} while (usedNumbers.contains(number) || rowNumbers.contains(number));usedNumbers.add(number);rowNumbers.add(number);matrix[i][j] = number;}}// 对每一行进行排序以满足杨氏矩阵的性质for (int i = 0; i < n; i++) {Arrays.sort(matrix[i]);}// 对每一列进行排序以满足杨氏矩阵的性质for (int j = 0; j < n; j++) {int[] column = new int[n];for (int i = 0; i < n; i++) {column[i] = matrix[i][j];}Arrays.sort(column);for (int i = 0; i < n; i++) {matrix[i][j] = column[i];}}return matrix;
}

杨氏数组中查找

// 杨氏数组中查找
// 这里采取从右上角的数字进行查找的方式
// 利用杨氏数组的特性,每一次比较右上角的值都可以去掉一行或者一列
private static boolean queryInYoungTableau(int[][] matrix, int search) {boolean flag = false;int row = 0;int column = matrix[0].length - 1;while (row < matrix.length && column >= 0) {int temp = matrix[row][column];if (temp == search) {flag = true;break;} else if (temp > search) {// 去掉列column--;} else {// 去掉行row++;}}return flag;
}

测试

public static void main(String[] args){int n = 8; // 矩阵的大小int[][] matrix = generateRandomYoungTableau(n);// 打印生成的杨氏矩阵for (int[] row : matrix) {System.out.println(Arrays.toString(row));}// 判断给定的数字是否存在于 杨氏矩阵中int search = 68;boolean exists = queryInYoungTableau(matrix, search);System.out.printf("%s是否存在于杨氏矩阵中:%s%n", search, exists);
}

测试结果:

在这里插入图片描述
在这里插入图片描述
但我这个杨氏数组不是很规范,这里面最大的值也就是64了,后面优化一下这个生成杨氏数组的方法

http://www.lryc.cn/news/532496.html

相关文章:

  • c语言对应汇编写法(以中微单片机举例)
  • 详解CSS `clear` 属性及其各个选项
  • 算法设计与分析三级项目--管道铺设系统
  • Page Assist - 本地Deepseek模型 Web UI 的安装和使用
  • VMware Win10下载安装教程(超详细)
  • DS目前曲线代替的网站汇总
  • 具有HiLo注意力的快速视觉Transformer
  • 《AI “造脸术”:生成对抗网络打造超真实虚拟人脸》
  • 2025.2.6总结
  • RK3576——USB3.2 OTG无法识别到USB设备
  • 低代码系统-插件功能分析( 某道云)
  • 如何在 FastAPI 中使用本地资源自定义 Swagger UI
  • wxWidgets生成HTML文件,带图片转base64数据
  • 基于ArcGIS的SWAT模型+CENTURY模型模拟流域生态系统水-碳-氮耦合过程研究
  • 一键掌握多平台短视频矩阵营销/源码部署
  • 2.Python基础知识:注释、变量以及数据类型、标识符和关键字、输入函数、输出函数、运算符、程序类型转换
  • 3NF讲解
  • Spring Boot框架下的单元测试
  • AI测试工程师成长指南:以DeepSeek模型训练为例
  • 【数据结构】_队列的结构与实现
  • 机器学习--2.多元线性回归
  • MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR)
  • 朴素贝叶斯原理
  • k8s中,一.pod污点,二.pod容器污点容忍策略,三.pod优先级(PriorityClass类)
  • 【重生之学习C语言----水仙花篇】
  • 两步构建 AI 总结助手,实现智能文档摘要
  • 承压金字塔(蓝桥杯17C)
  • day33-数据同步rsync
  • Android 实现首页Tab切换并且支持懒加载功能详解
  • [Android] 360行车记录仪谷歌版