算法-数组-二维数字中的查找

问题描述:每行从左到右,每列从上到下递增的二维数组中,判断某个数是否存在。

1 2  8  9
2 4  9 12
4 7 10 13
6 8 11 15
7 9 12 18

思路 :从右上角开始呢?以上的矩阵,假如我们查找的是7,从右上角开始,先比较9和7,9比7大,9又是本列的第一个,那么可以确定,9所在的列数字都大于7,我们可以排除最后一列,前移一列。比较8和7,8大于7,同样的思想我们可以排除8所在的列。接下来比较2和7,2小于7,那么2所在的行前面的数字都小于7,可以不必再比较了,直接排除2所在的行。以此类推,我们很快就可以定位到7.


<script type="text/javascript">
 	let arr1 = [[1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15],[7, 9, 12, 18]];
 	
 	function findNumber (num, arr) {
 		let rows = arr.length;
 		let columns = arr[0].length;
 		let found = false;
 		if(typeof num === 'number' && rows > 0 && columns > 0) {
 			let row = 0;
 			let column = columns - 1;
 			while(row < rows && column >= 0) {
 				if(arr[row][column] == num) {
 					found = true;
 					break;
 				} 
 				else if(arr[row][column] > num) {
 					column --;
 				}
 				else(arr[row][column] < num) 
 					row ++;
 				
 			}
 		}
 		return found;
 	}

 	console.log(findNumber(14, arr1));

 </script>


猜你喜欢

转载自blog.csdn.net/Wangdanting123/article/details/54850944