剑指offer03-04

剑指offer 03.04

1.面试题03.数组中重复的数值

方法1.直接使用暴力查找的方法,

    public static int findRepeatNumber(int[] nums){
        int[] arrs = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            arrs[nums[i]] ++;
            if(arrs[nums[i]]>1) return nums[i];
        }
        return -1;
    }

  

2.面试题04.二维数组中的查找

方法1.直接使用暴力查找的方法

 1     public static boolean findNumberIn2DArray(int[][] matrix, int target) {
 2         int n = matrix.length,m;
 3         if(n!=0)  m = matrix[0].length;
 4         else return false;
 5         for(int i =0;i<n;i++){
 6             for(int j =0;j<m;j++)
 7                 if(matrix[i][j]==target) return true;
 8         }
 9         return false;
10     }

方法2.将这个二维数组看成是一个二叉排序树,从右上角看作是二叉排序树的根

    public static boolean findNumberIn2DArrayPlus(int[][] matrix,int target){
        int n = matrix.length,m,rN,rM;
        if(n!=0) m = matrix[0].length;
        else return false;
        
        rN = 0;
        rM = m-1;
        if(rN>=n||rM<0) return false;
        int root = matrix[rN][rM];
        while(true){
            if(rN>=n||rM<0) return false;
            if(root<target) rN++;
            else if(root>target) rM--;
            else return true;
            root = matrix[rN][rM];
        }

    }
知之为知之,不知为不知
原文地址:https://www.cnblogs.com/bevishe/p/12307482.html