《剑指offer》刷题记录(语言:Java,持续更新)

主要是记录给自己看,保持一定的输出,同时自我监督,望坚持!


1 二维数组的查找

  • 知识点:查找、数组
  • 题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

1.1 我的思路:简单遍历暴力查找

public class Solution {
    
    
    public boolean Find(int target, int [][] array) {
    
    
    	// ***改进处:插入无效条件判断***
        byte flag = 0;
        for(int i = 0;i < array.length;i++){
    
    
            for(int j = 0;j < array[i].length;j++){
    
    
                if(array[i][j] == target){
    
    
                    flag = 1;
                    break;
                }
            }
            if(flag == 1){
    
    
                break;
            }
        }
        // ***注意处:这段不能提到for循环里,否则第一层找不到就会跳出***
        if(flag == 1){
    
    
            return true;
        }else{
    
    
            return false;
        }
    }
}

分析

  • 思路缺点:效率低,题目信息利用不够充分
  • 代码缺点:没有无效条件判断,故在改进处插入
//二维数组为空情况:
//1、数组首地址为空:array = {}
//2、array = {}:array.length == 0
//3、array ={
    
    {}}:array.length == 1,array[0].length == 0
if(array==null||array.length==0||array[0].length==0) return false; 

更优思路1:二分查找

因为数组从左到右递增,从上到下递增,故可从数组左下角开始二分查找。小于该值则上移,大于则右移,也可从右上角开始。

猜你喜欢

转载自blog.csdn.net/WB18002337539/article/details/109098901