[leetcode]74. Search a 2D Matrix -- JavaScript 代码

朱雀 2022-07-19 11:52 131阅读 0赞

这道题很明显的就是用二分法,但是是两个维度的二分法:
第一次使用二分法,是要找到那个可能包含target数字的数组。也就是说,这个数组的第一个数应该小于target而它的下一个数组的第一个数要大于target。
第二次使用二分法就是在数组内寻找。这一步就是中规中矩的二分法了。
代码如下:

  1. /** * @param {number[][]} matrix * @param {number} target * @return {boolean} */
  2. var searchMatrix = function(matrix, target) {
  3. var m_len = matrix.length;
  4. if(m_len>0){
  5. r_len = matrix[0].length;
  6. }
  7. if(m_len===0||r_len===0){
  8. return false;
  9. }
  10. var start = 0;
  11. var end = m_len-1;
  12. var mid = Math.floor((start + end)/2);
  13. while(start<end){
  14. // 第一次使用二分法,和正常的二分法稍有不同。
  15. if(matrix[mid][0]<target){
  16. start = mid+1>m_len-1?m_len-1:mid+1;
  17. }else if(matrix[mid][0]>target){
  18. end = mid-1<0?0:mid-1;
  19. }else{
  20. return true;
  21. }
  22. mid = Math.floor((start + end)/2);
  23. }
  24. var t_array = [];
  25. if(matrix[mid][0]>target){
  26. mid = mid-1<0?0:mid-1;
  27. }
  28. t_array = matrix[mid];
  29. start = 0;
  30. end = r_len-1;
  31. mid = Math.floor((start + end)/2);
  32. while(start<end){
  33. // 第二次使用二分法,就是中规中矩的二分法了。
  34. if(t_array[mid]<target){
  35. start = mid+1;
  36. }else if(t_array[mid]>target){
  37. end = mid-1;
  38. }else{
  39. return true;
  40. }
  41. mid = Math.floor((start + end)/2);
  42. }
  43. return (t_array[mid]==target);
  44. };

发表评论

表情:
评论列表 (有 0 条评论,131人围观)

还没有评论,来说两句吧...

相关阅读