1. 程式人生 > >演算法-陣列-二維數字中的查詢

演算法-陣列-二維數字中的查詢

問題描述:每行從左到右,每列從上到下遞增的二維陣列中,判斷某個數是否存在。

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>