演算法-陣列-二維數字中的查詢
阿新 • • 發佈:2018-12-08
問題描述:每行從左到右,每列從上到下遞增的二維陣列中,判斷某個數是否存在。
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>