0
点赞
收藏
分享

微信扫一扫

【记录从零开始刷剑指Day05】

small_Sun 2022-03-11 阅读 89

题目给的是n*m的数组,测试用例里面居然有一个[ ]…所以在最开始就加了判断语句;
顺便复习了一下二维数组的用法:
type a[ ][ ];
a.length为a的行数;
a[0].length为第1行的列数;

class Solution {
//整个二维矩阵从右上角看是一个类似二叉查找树的结构,左节点小于父节点
//右节点大于父节点,故从最右上角的点开始往下查找即可。
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
         if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return false;
        }//当n*m数组为空||只有一个空元素时
        int row =0,col = matrix[0].length-1;
        while(row <= matrix.length-1 && col >= 0){
            if(matrix[row][col] > target){
                col--;
            }else if(matrix[row][col] < target){
                row++;
            }else{
                return true;
            }
        }
        return false;

    }
}
class Solution {//二分法解决有序问题
    public int minArray(int[] numbers) {
        int left = 0,right = numbers.length-1;
        int m = 0;
        while(left < right){
            m = (left + right)/2;
            if(numbers[m] > numbers[right]) left = m + 1;
            else if(numbers [m] < numbers[right]) right = m;
            else right--;
        }
        return numbers[left];
    }
}

思路及证明过程来自:

举报

相关推荐

0 条评论