剑指offer(题三)

题意:给出一个二维矩阵,每行、每列都递增排序。查找这个矩阵中的某个数,看是否存在。
思路:每次看最右上角的数,若和待查找的数相等,则返回;若是大于目标数,则将矩阵中的该列删除;若是小于目标数,则将矩阵中的该行删除。同样,也可每次看最左下角的数字。
代码:

package MianShiTi_3;

public class MianShiTi_3 {
    //从最右上角开始查找
    public boolean Find(int [][]matrix ,int target){
        int rows = matrix.length;
        int columns = matrix[0].length;
        boolean find = false;
            if(matrix != null && rows > 0 && columns > 0){
                int row = 0;
                int column = columns -1;
                while (row < rows && column >=0) {
                    if(matrix[row][column] == target){
                        find = true;
                        break;
                    }else if (matrix[row][column] > target) {
                        column -- ;
                    }else {
                        row++;
                    }
                }
            }
            return find;
    }
    //从最左下角开始查找
    public String Find2(int [][]matrix ,int target){
        int rows = matrix.length;
        int columns = matrix[0].length;
        String s1 = "bingo";
        String s2 = "foolish";
            if(matrix != null && rows > 0 && columns >0){
                int row = rows - 1;
                int column = 0;
                while (column < columns && row >=0) {
                    if(matrix[row][column] == target){
                        return s1;
                    }else if (matrix[row][column] < target) {
                        column++;
                    }else {
                        row--;
                    }
                }
            }
            return s2;
        }


    public static void main(String[] args) {
        int [][]matrix = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
        boolean Find = false;
        int target1 = 1;
        int target2 = 100;
        Find = new MianShiTi_3().Find(matrix, target1);
        System.out.println(Find);
        System.out.println(new MianShiTi_3().Find2(matrix, target2));
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值