信誉好的邯郸网站建设,wordpress设计素材主题,杭州包装设计,万网虚拟机wordpress目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言
当前所有算法都使用测试用例运行过#xff0c;但是不保证100%的测试用例#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识#xff01; 问题介绍 …
目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言
当前所有算法都使用测试用例运行过但是不保证100%的测试用例如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识 问题介绍
原问题 给定二维数组arrarr为排好序的数组其中arr同时满足从左到右递增从上到下递增给定一个数k在尽可能少的时间内找到数k即可 如 arr [0125234744485779]\begin{bmatrix} 0 1 2 5 \\ 2 3 4 7 \\ 4 4 4 8 \\ 5 7 7 9 \end{bmatrix}0245134724475789 k 7 结果true
解决方案
原问题 假设arr为N*M的矩阵 1、从右上角或者左下角开始如果k arr[N][0] 说明k一定小于arr的第N行行– 2、如果k arr[N][0] ,说明k一定大于arr的第0列列 3、通过以上规则查找到数后返回true找不到并且越界后则退出循环返回false
代码编写
java语言版本
原问题
/*** 二轮测试在排好序的矩阵中找数* param arr* param k* return*/public static boolean isContainsCp1(int[][] arr, int k) {if (arr null || arr.length 0) {return false;}int row arr.length - 1;int col 0;while (row 0 col arr[0].length - 1) {int cur arr[row][col];if (cur k) {return true;}else if (cur k) {// 当前行不会存在krow--;}else {// 当前列不会存在kcol;}}return false;}public static void main(String[] args) {System.out.println(isContainsCp1(new int[][]{{0,1,2,5},{2,3,4,7},{4,4,4,8},{5,7,7,9}}, 7));}
c语言版本
正在学习中
c语言版本
正在学习中
思考感悟
每一次的比较都能够至少排除一行或者一列这个速度应该是比较快的了如果大家有更好的办法记得评论区各显神通哦~
写在最后 方案和代码仅提供学习和思考使用切勿随意滥用如有错误和不合理的地方务必批评指正~ 如果需要git源码可邮件给2260755767qq.com 再次感谢左大神对我算法的指点迷津