牛客網上的問題描述:數組
在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。函數
本身寫了一個很簡單的二次循環查找。(在這裏邊考慮了若是不是數組的狀況,原本想寫一個自身循環調用的寫法,可是都失敗了==!)spa
/** * * @param {number} target * @param {number[]} array */ function Find(target, array) { var len = array.length; var flag = false; for(var i=0; i< len; i++) { var ele = array[i]; if(typeof ele !== 'object') { if(target === ele) { flag = true; continue; } } else { var idx = ele.indexOf(target); //flag = (idx!=-1)&&true; if(idx !== -1) { flag = true; } } } return flag; }
在牛客網上分享區裏找到了一個思路,由於題目描述是順序從左至右排列,能夠利用二叉樹查找的方法。code
function Find(target, array) { for(var i=0; i<array.length; i++) { var low = 0, ele = array[i]; var high = ele.length - 1; while(low <= high) { var mid = Math.floor((low+high)/2); if( target < ele[mid]) { high = mid - 1; }else if( target > ele[mid] ) { low = low + 1; } else { return true; } } } return false; }
2. blog
/** * 給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。 *你能夠假設每一個輸入只對應一種答案,且一樣的元素不能被重複利用。 * @param {number[]} nums * @param {number} target * @return {number[]} */ function twoSum(nums, target) { var res =[]; for(var i=0; i<nums.length;i++) { for(var j=i+1; j<nums.length; j++) { if(i !== j && (nums[i] + nums[j]) === target) { res.push(i); res.push(j); break; } } } return res; };