当前位置:   article > 正文

74. 搜索二维矩阵

搜索二维矩阵

74. 搜索二维矩阵 - 力扣(LeetCode)

思路:

方法1:可以使用两次二分,先在第一列上二分,然后确定第一个小于等于target的行r,然后再在r行上二分,找到第一个小于等于target的值t。如果r不存在或者t不存在,返回false,否则返回true。 

方法2:把二维数组通过坐标变换转为一维数组,使用一次二分就行了。

总结:

二分的应用。

代码:

 方法1:

  1. class Solution {
  2. public boolean searchMatrix(int[][] matrix, int target) {
  3. int m = matrix.length - 1;
  4. int n = matrix[0].length - 1;
  5. int m0 = 0;
  6. int n0 = 0;
  7. while(m0 <= m) {
  8. int mid = m0 + (m - m0)/2;
  9. if(matrix[mid][0] > target) {
  10. m = mid - 1;
  11. }
  12. else {
  13. m0 = m0 + 1;
  14. }
  15. }
  16. if(m < 0) return false;
  17. while(n0 <= n) {
  18. int mid = n0 + (n - n0)/2;
  19. if(matrix[m][mid] > target) {
  20. n = mid - 1;
  21. }
  22. else {
  23. n0 = n0 + 1;
  24. }
  25. }
  26. return n >= 0 && matrix[m][n] == target ? true : false;
  27. }
  28. }

方法2:

  1. class Solution {
  2. public boolean searchMatrix(int[][] matrix, int target) {
  3. int m = matrix.length;
  4. int n = matrix[0].length;
  5. int l = 0, r = m*n - 1;
  6. while(l <= r) {
  7. int mid = l + (r - l)/2;
  8. if(matrix[mid/n][mid%n] < target) {
  9. l = mid + 1;
  10. }
  11. else {
  12. r = mid - 1;
  13. }
  14. }
  15. return l < m * n && matrix[l/n][l%n] == target ? true : false;
  16. }
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/459032
推荐阅读
相关标签
  

闽ICP备14008679号